Фильтр OpenSessionInView заставляет запускать приложение Grails? - PullRequest
3 голосов
/ 10 мая 2011

Я использую OpenSessionInView с DWR, чтобы получить Hibernate-сеанс для моих запросов 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>

1 Ответ

2 голосов
/ 11 мая 2011

Очень странно, но вам нужно добавить несколько 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, но это боль.

...