您链接到的问题已经排除了数据库编码的原因,因为在保存到数据库之前打印/重新显示提交的值期间已经发生了问题。因此,问题在于 HTTP 请求编码。
指定字符集的 JDBC 连接 URL,
jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8
仅告诉 MySQL JDBC 驱动程序使用 UTF-8 对 SQL 查询中的值进行解码,然后再将其发送到 DB。这不仅完全超出了 JSF 的范围,而且这也不是您的问题的原因,前提是您绝对肯定您遇到了与链接问题中相同的问题。
带有指定字符集的 XML 序言,
<?xml version='1.0' encoding='UTF-8' ?>
仅告诉 XML 解析器在围绕它构建 XML 树之前使用 UTF-8 对 XML 源进行解码。实际使用的 XML 解析器是 Facelets 在 JSF 视图构建期间内部使用的 SAX。这部分与 HTTP 请求/响应编码完全无关,因此不太可能是您的问题的原因。
它们都没有设置 HTTP 请求编码,而您需要设置 HTTP 请求编码。您链接到的问题已经显示了如何为 Glassfish 服务器执行此操作。但是,在您的情况下,您使用的是 JBoss AS 服务器。Glassfish 特定的设置不适用,JBoss 不支持类似的设置。您需要引入一个自定义 servlet 过滤器来完成这项工作。例如
@WebFilter("/*")
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);
}
// ...
}