7
votes

GRAILS: Retour 404 & Afficher ma page "non trouvée" pour identifiant non valide

Quelle est la meilleure façon de gérer des identifiants non valides dans une action du contrôleur GRAVES?

quand mydomainclass.get (paramètres ['i']) renvoie null dans mon contrôleur Action je souhaite que l'utilisateur voie ma page "non trouvée" personnalisée et pour un code de réponse HTTP 404 à retourné - je ne peux pas comprendre le moyen le plus propre de le faire.

Merci.


0 commentaires

3 Réponses :


4
votes

Modifier - Je m'excuse de mal interpréter votre question. La méthode de rendu prend un code d'état. Donc, dans le contrôleur, si rien n'est trouvé, essayez xxx

ou xxx

ou les deux (dans un appel de rendu).


2 commentaires

Je l'ai déjà déjà, mais je ne comprends pas comment je suis supposé cela pour rendre quand je ne trouve pas mon objet de domaine: si (! Mydomainclass.get (paramètres ['i'])) {/ * Alors quoi ...? * /} . Faire Response.SendeError (404) renvoie un 404 D'accord, mais ne rend pas cette page d'erreur - l'utilisateur voit une page vierge.


Je viens de relire Grails dans l'action p. 331 Et il est dit qu'il existe des limitations pour renvoyer des codes d'erreur - vous ne pouvez pas fournir de contenu pour la réponse et le type de contenu sera texte / html . Que je ne savais pas et me confond plus loin ...



8
votes

J'ai utilisé ce qui suit dans mes contrôleurs, où "NOTNOUND" est une page personnalisée 404:

static mappings = {
   "403"(view: "/errors/forbidden")
   "404"(view: "/errors/notFound")
   "500"(view: "/errors/serverError")
}


2 commentaires

Je crois que c'est une mauvaise pratique de rediriger une ressource introuvable, du moins pour des architectures reposantes.


@Joshdiehl a raison. Cette implémentation envoie une trentaine d'abord, puis une 404, vous devriez revenir 404 immédiatement.



0
votes

Voici ma formule magique pour faire cela. Peut-être qu'il y a une meilleure façon, mais celui-ci fonctionne et assure la même chose 404 rend la même chose que vous produisiez le 404 ou les grails le fait en interne (aucun contrôleur trouvé, par exemple).

Premièrement, créez une classe d'affichage qui s'étend abstractview: xxx pré>

Suivant, créez un contrôleur d'erreur: p>

def myAction = {
    Thing thing = Thing.get(params.id)
    if (!thing) {
         return new ModelAndView(new NotFoundView())
    }
}


0 commentaires