Grails 404 UrlMapping的问题

时间:2010-11-15 03:09:46

标签: grails

我遇到一些问题,让Grails将我的404错误映射到文档中的错误控制器。我正在运行Grails 1.3.5,当我将以下映射添加到默认应用程序时:

“404”(控制器:'错误',动作:'notFound')

它适用于映射500个错误,但不能映射404。我似乎记得以前遇到过这个问题并且它与Tomcat(与Jetty)有关但我不记得修复或者我认为现在可能已经解决了。

我尝试访问未定义为http://localhost:8080/appName/controllerName/blah的资源,我得到的只是默认的Tomcat 404。

我正在做一个标准的 grails run-app 进行测试并尝试让它运行。

3 个答案:

答案 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 的结构自发布时间以来似乎已发生变化,因此必须进行修改。