在其中一个项目中,我在表单数据上提供了非英语内容(芬兰语)。我们正在使用带有 PrimeFaces 的 JSF 2.0。将数据提交到服务器时遇到问题。提交表单时数据已损坏。只有芬兰角色在这方面变得腐败。
有没有人已经遇到过这个问题并找到了解决方案?
在其中一个项目中,我在表单数据上提供了非英语内容(芬兰语)。我们正在使用带有 PrimeFaces 的 JSF 2.0。将数据提交到服务器时遇到问题。提交表单时数据已损坏。只有芬兰角色在这方面变得腐败。
有没有人已经遇到过这个问题并找到了解决方案?
这是自 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);
}
// ...
}