2010-07-03 7 views

risposta

4

Solitamente reindirizzo i gestori del codice di errore a un controller in modo da poter eseguire alcune registrazioni o qualsiasi altra cosa prima di visualizzare la vista. È possibile utilizzare che anche qui:

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') 
    } 
} 

dove ErrorsController sembra qualcosa di simile:

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' 
    } 
} 

e avrete bisogno di creare accessDenied.gsp, notFound.gsp, e notAllowed.gsp in grails- app/errori

Inviando un controller "nascosto" alla sua mappatura personalizzata è possibile accedere all'accesso inaspettato ad esso, ma rendere ancora la pagina 404 per nascondere la sua esistenza.

+0

Questa è una buona idea, quindi posso farlo sembrare qualsiasi altro errore non trovato. Mi piace! Avevo creato un /views/searchable/index.gsp per sovrascrivere quello incluso con il plugin, ma mi limiterò a liberarmene e lo farò in questo modo. Grazie! –

+0

@Burt: c'è un modo per disabilitare/rimuovere l'UrlMapping all'avvio? Questa sarebbe una soluzione molto più elegante. –

+0

Probabilmente potresti rimuoverlo, ma dubito che sarebbe una soluzione semplice. Sembra un buon candidato per una richiesta di funzionalità. Probabilmente potrebbe essere implementato quando facciamo i namespace dei controller (provvisoriamente v2.2). –