我有一个过滤器,用于设置字符编码过滤器。
的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之前设置字符编码。我怎么能这样做?
答案 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减去上下文路径,路径信息为空。- 所有其他字符串仅用于完全匹配。