我遇到一些问题,让Grails将我的404错误映射到文档中的错误控制器。我正在运行Grails 1.3.5,当我将以下映射添加到默认应用程序时:
“404”(控制器:'错误',动作:'notFound')
它适用于映射500个错误,但不能映射404。我似乎记得以前遇到过这个问题并且它与Tomcat(与Jetty)有关但我不记得修复或者我认为现在可能已经解决了。
我尝试访问未定义为http://localhost:8080/appName/controllerName/blah的资源,我得到的只是默认的Tomcat 404。
我正在做一个标准的 grails run-app 进行测试并尝试让它运行。
答案 0 :(得分:8)
删除空格后,问题解决了
“404”(控制器:'错误',动作:'notFound')
答案 1 :(得分:0)
http://jira.codehaus.org/browse/GRAILS-4232我认为这是一个已知问题
答案 2 :(得分:0)
将以下代码添加到应用程序的 scripts / 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)
}
}
有关说明,请参阅this post。请注意,我已经从该帖子中复制了上述脚本,但由于 web.xml 的结构自发布时间以来似乎已发生变化,因此必须进行修改。