2010-07-03 8 views

Respuesta

4

Por lo general, vuelvo a enrutar los manejadores de código de error a un controlador para que pueda hacer algo de registro o lo que sea antes de mostrar la vista. Puede usar que aquí también:

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

donde ErrorsController se ve algo como esto:

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

y usted necesitará crear accessDenied.gsp, notFound.gsp y notAllowed.gsp en grails- aplicación/errores

Al enviar un controlador "oculto" a su asignación personalizada, puede iniciar sesión en un acceso inesperado, pero aún así mostrar la página 404 para ocultar su existencia.

+0

Esa es una buena idea, entonces puedo hacer que parezca cualquier otro error de recurso no encontrado. ¡Me gusta! Creé un archivo /views/searchable/index.gsp para sobrescribir el que viene con el complemento, pero me desharé de eso y lo haré de esta manera. ¡Gracias! –

+0

@Burt - ¿hay alguna forma de desactivar/eliminar el UrlMapping al inicio? Esa sería una solución mucho más elegante. –

+0

Probablemente podría eliminarlo, pero dudo que sea una solución simple. Parece un buen candidato para una solicitud de función. Probablemente podría implementarse cuando hagamos espacios de nombres de controlador (tentativamente v2.2). –

Cuestiones relacionadas