为什么在post请求中的过滤器调用之前会调用managed-bean方法

时间:2014-11-18 12:33:02

标签: java java-ee

我有一个过滤器,用于设置字符编码过滤器。

的web.xml:

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>ua.com.winforce.online.site.http.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

过滤器本身:

public class EncodingFilter implements Filter {
    private static final String ENCODING = "UTF-8";

    FilterConfig config;

    public void init(FilterConfig filterConfig) throws ServletException {
        this.config = filterConfig;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        request.setCharacterEncoding(ENCODING);
        filterChain.doFilter(request, response);
    }

    public void destroy() {
    }
}

标记用户提交表单:

<h:form>
    <h:commandLink styleClass="ruski-button green-g full-width" action="#{supportController.save}"  >
    </h:commandLink>
</h:form>

事情是过滤器的方法doFilter在发出请求时supportController.save方法之前调用。但是我需要在supportController.save invokation之前设置字符编码。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

更改过滤器映射

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  

SRV.11.2映射规范

     

在Web应用程序部署描述符中,使用以下语法   用于定义映射:

     
      
  • 以“/”字符开头并以“/ *”后缀结尾的字符串用于路径映射。
  •   
  • 以'*。'前缀开头的字符串用作扩展名映射。
  •   
  • 仅包含'/'字符的字符串表示&#34;默认&#34;应用程序的servlet。在这种情况下,servlet路径是
      请求URI减去上下文路径,路径信息为空。
  •   
  • 所有其他字符串仅用于完全匹配。
  •