2010-07-03 8 views

Antwort

4

Normalerweise route ich Fehlercode-Handler zu einem Controller, so dass ich etwas Protokollierung oder was auch immer tun kann, bevor die Ansicht gerendert wird. Sie können auch, dass hier verwenden:

class UrlMappings { 

    static mappings = { 

     "/searchable/$action?"(controller: "errors", action: "urlMapping") 

     "/$controller/$action?/$id?" { } 

     "/"(view:"/index") 

     "403"(controller: "errors", action: "accessDenied") 
     "404"(controller: "errors", action: "notFound") 
     "405"(controller: "errors", action: "notAllowed") 
     "500"(view: '/error') 
    } 
} 

wo ErrorsController etwa wie folgt aussieht:

class ErrorsController { 

    def accessDenied = {} 

    def notFound = { 
     log.debug "could not find $request.forwardURI" 
    } 

    def notAllowed = {} 

    def urlMapping = { 
     log.warn "unexpected call to URL-Mapped $request.forwardURI" 
     render view: 'notFound' 
    } 
} 

und Sie werden accessDenied.gsp, notFound.gsp und notAllowed.gsp in grails- erstellen müssen app/errors

Durch das Senden eines "versteckten" Controllers an seine benutzerdefinierte Zuordnung können Sie einen unerwarteten Zugriff darauf protokollieren, die 404-Seite jedoch trotzdem rendern, um ihre Existenz zu verbergen.

+0

Das ist eine gute Idee, dann kann ich es so aussehen lassen, wie jeder andere nicht gefundene Fehler. Ich mag das! Ich hatte ein /views/searchable/index.gsp erstellt, um das im Plugin enthaltene zu überschreiben, aber ich werde es einfach loswerden und es auf diese Weise tun. Vielen Dank! –

+0

@Burt - Gibt es eine Möglichkeit, das UrlMapping beim Start zu deaktivieren/entfernen? Das wäre eine viel elegantere Lösung. –

+0

Sie könnten es wahrscheinlich entfernen, aber ich bezweifle, dass es eine einfache Lösung wäre. Scheint wie ein guter Kandidat für eine Feature-Anfrage. Es könnte wahrscheinlich implementiert werden, wenn wir Controller-Namespaces ausführen (vorläufig v2.2). –

Verwandte Themen