JSF中的UTF-8表单提交正在破坏数据

Shy*_*yam 11 character-encoding primefaces jsf-2

在其中一个项目中,我在表格数据上提供非英语内容(芬兰语).我们正在使用JSF 2.0和PrimeFaces.将数据提交到服务器时遇到问题.提交表单时数据已损坏.只有芬兰人在这方面变得腐败.

有没有人遇到过这个问题并找到了解决方案?

Bal*_*usC 20

这是自PrimeFaces 3.0以来的一个已知问题.这是由于它检查当前HTTP请求是否是ajax请求的方式的变化引起的.它由请求参数而不是请求标头标识.在恢复JSF视图之前第一次检索请求参数时,将使用服务器的默认字符编码来解析所有请求参数,该编码通常是ISO-8859-1,而不是JSF自己的默认字符编码UTF-8.有关深入解释,请参阅通过PrimeFaces输入组件检索的Unicode输入已损坏.

其中一个解决方案是创建一个过滤器request.setCharacterEncoding("UTF-8").

@WebFilter("*.xhtml")
public class CharacterEncodingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • @Kia:显然你的`FacesServlet`没有映射到`*.xhtml`,而是映射到其他东西,比如`/ faces/*`或`*.jsf`.然后,您应该将过滤器的URL模式更改为相同.`/*`确实匹配**每个**HTTP请求.顺便说一下,只需`@WebFilter("/*")`就足够了. (2认同)