jsf-2 - JSF 中的 UTF-8 表单提交会损坏数据

标签 jsf-2 character-encoding primefaces

在其中一个项目中,我在表单数据上提供了非英语内容(芬兰语)。我们将 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/

相关文章:

Python 字符编码

java - 无法让 JSR303 注释与 Tomcat 7 一起使用

java - 在为 iOS 编译的 libGDX 项目中使用斯堪的纳维亚字母

xml - 使用 Facelets 从 JSF2 输出 XML

java - 某些脚本即使以 UTF-8 编码,也无法在 JPanel 中正确显示?

ajax - 如何使用 AjaxBehaviorEvent 获取 selectedDate?

jakarta-ee - 无法找到或服务资源

ajax - 如何以编程方式将 AjaxBehavior 添加到具有主界面的 UIComponent

jsf-2 - 在 JSF 中带注释的验证器生成的错误消息中包含字段名称

java - JSF <f :validateRegex pattern