Quelle est la meilleure façon de gérer des identifiants non valides dans une action du contrôleur GRAVES? P>
quand Merci. P> mydomainclass.get (paramètres ['i']) code> 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. P>
3 Réponses :
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 ou p> ou les deux (dans un appel de rendu). p> p>
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 ...? * /} code>. Faire
Response.SendeError (404) Code> renvoie un
404 code> 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 code>. Que je ne savais pas et me confond plus loin ...
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") }
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.
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: Suivant, créez un contrôleur d'erreur: p> def myAction = {
Thing thing = Thing.get(params.id)
if (!thing) {
return new ModelAndView(new NotFoundView())
}
}