【问题标题】:OpenSessionInView filter causes grails run-app to bomb?OpenSessionInView 过滤器导致 grails run-app 爆炸?
【发布时间】:2011-08-22 13:54:00
【问题描述】:

我正在使用带有 DWR 的 OpenSessionInView 来为我的 ajax 请求获取休眠会话。当我通过部署的战争开始时,这工作正常,但是当我尝试使用 run-app 运行时,我收到以下错误:

ERROR: org.apache.catalina.startup.ContextConfig - Parse error in application web.xml file at file:/C:/Users/stefan/.grails/1.3.6/projects/myproject/resources/web.xml java.lang.IllegalArgumentException: Filter mapping specifies an unknown filter name hiddenHttpMethod

web.xml

<filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
        <param-name>singleSession</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>/dwr/*</url-pattern>
</filter-mapping>

我尝试添加 hiddenHttpMethod 过滤器映射,但我得到了同样的错误。怎么回事?

添加失败的条目:

<filter>
        <filter-name>hiddenHttpMethod</filter-name>
        <filter-class>org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>hiddenHttpMethod</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

【问题讨论】:

    标签: hibernate spring tomcat grails liferay


    【解决方案1】:

    很奇怪,但是您需要在文件顶部添加多个web.xml 条目,因为过滤顺序很重要。

    在过滤器顶部附近添加:

     <filter>
            <filter-name>hiddenHttpMethod</filter-name>
            <filter-class>org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>hiddenHttpMethod</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>FORWARD</dispatcher>
            <dispatcher>REQUEST</dispatcher>
        </filter-mapping>
    
        <filter>
            <filter-name>reloadFilter</filter-name>
            <filter-class>org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>reloadFilter</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>FORWARD</dispatcher>
            <dispatcher>REQUEST</dispatcher>
        </filter-mapping>
    

    但是请注意,这会将 reloadFilter 添加到您的生产战争中。您可以通过拦截 webXml 事件来消除它,但这很痛苦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 2016-10-16
      • 2011-06-21
      • 2019-07-24
      • 2017-12-10
      相关资源
      最近更新 更多