2010-11-15 22 views
8

Tengo algunos problemas para que Grails asigne mis errores 404 a un controlador de errores como en la documentación. Estoy corriendo Grails 1.3.5 y cuando añado la siguiente asignación a una aplicación por defecto:Problemas con Grails 404 UrlMapping

"404" (controlador: 'errores', la acción: 'NOTFOUND')

Se trabaja para la asignación de 500 errores pero no 404's Parece recordar haber tenido este problema antes y relacionado con Tomcat (frente a Jetty) pero no recuerdo una solución o pensé que ya se habría resuelto.

que intente acceder a un recurso que no está definido como http://localhost:8080/appName/controllerName/blah y todo lo que consigo es el valor por defecto de Tomcat 404.

que estoy haciendo un estándar griales ejecutar la aplicación para la prueba y tratar de conseguir que funcione.

+0

ahora he intentado reproducir el problema, en la práctica, sin embargo, todo lo que intenté (reenviar a una vista, reenviar a controlador/acción, ejecución-aplicación, modo de producción GUERRA) funcionó como se esperaba. ¿Puedes proporcionar una prueba reproducible? – robbbert

+0

El problema no es reproducible para mí (lo intenté mucho). - El interlocutor no dio ningún comentario. - Votando la pregunta hacia abajo. - Gracias. – robbbert

+0

¡Breakthough! Parece que me funciona si redirijo el método del controlador de errores, pero no si intento renderizar una página. Intentaré configurar un proyecto de bitbucket y subiré un ejemplo. – ahanson

Respuesta

8

después de eliminar los espacios en blanco, el problema resuelto

"404" (controlador: 'errores', la acción: 'NOTFOUND')

+0

Esto suena como una respuesta insana, pero a mí también me funcionó. –

+0

Muy extraño. Eso también resuelve mi problema. Gracias. – ahanson

+2

Vea esto http://jira.grails.org/browse/GRAILS-7360 – Topera

0

Agregue el código siguiente para guiones de su aplicación/Events.groovy:

import groovy.xml.StreamingMarkupBuilder 

//modify the generated web.xml so that it supports being mapped to 'error' 
eventWebXmlEnd = {String tmpfile -> 
    //find the filter mapping to change 
    String filterNm = "grailsWebRequest" 
    def root = new XmlSlurper().parse(webXmlFile) 
    def gwr = root."filter-mapping".find { it."filter-name" == filterNm } 
    if (!gwr.size()) throw new RuntimeException(
     "[fail] No Filter named $filterNm") 

    // xml is as expected, now modify it and write it back out 
    gwr.appendNode { 
     dispatcher("ERROR") 
    } 
    // webXmlFile is an implicit variable created before event is invoked 
    webXmlFile.text = new StreamingMarkupBuilder().bind { 
     mkp.declareNamespace("": "http://java.sun.com/xml/ns/j2ee") 
     mkp.yield(root) 
    } 
} 

Ver this post una explicación. Tenga en cuenta que he copiado el script anterior de esa publicación, pero tuvo que ser modificado ya que la estructura de web.xml parece haber cambiado desde el momento de la escritura de la publicación.

+0

Lo siento, estaba equivocado. - Hice algunas pruebas reales ahora y descubrí que esto no es necesario con Grails 1.3.5. - El uso de un mapeo 404 personalizado funcionó para mí al reenviar a una * vista * o a * controlador * y * acción *. - Prácticamente, no puedo reproducir ningún problema con las 404 asignaciones de URL en Grails. – robbbert