在其中一个项目中,我在表单数据上提供了非英语内容(芬兰语)。我们将 JSF 2.0 与 PrimeFaces 结合使用。我在向服务器提交数据时遇到问题。当我提交表单时,数据已损坏。只有芬兰角色在这方面变得腐败。
有人遇到过这个问题并找到解决方案吗?
最佳答案
这是自 PrimeFaces 3.0 以来的一个已知问题。这是由于检查当前 HTTP 请求是否为 ajax 请求的方式发生了变化所致。它是通过请求参数而不是请求 header 来标识的。当在 JSF View 恢复之前第一次检索请求参数时,所有请求参数都将使用服务器的默认字符编码(通常是 ISO-8859-1)而不是 JSF 自己的默认字符编码 UTF-8 进行解析。有关深入的解释,请参阅 Unicode input retrieved via PrimeFaces input components become corrupted .
解决方案之一是创建一个执行 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);
}
// ...
}
关于jsf-2 - JSF 中的 UTF-8 表单提交会损坏数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10721342/