【问题标题】:Set request character encoding of JSF input submitted values to UTF-8将 JSF 输入提交值的请求字符编码设置为 UTF-8
【发布时间】:2013-07-13 08:18:43
【问题描述】:

我和Set request character encoding of JSF input submitted values to UTF-8 in GlassFish 有同样的问题,提交的值到达Mojibake。但是,答案针对的是 GlassFish,我使用的是 JBoss AS 7。

我已经指定了使用 UTF-8 的 JDBC 连接 URL:

jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8

在我的 JSF 页面顶部:

<?xml version='1.0' encoding='UTF-8' ?>

如何在 JBoss AS 7 中解决同样的问题?或者更好,以更通用的方式,使其适用于所有服务器?

【问题讨论】:

  • 无法理解您的问题是什么。请编辑您的问题,以明确您面临的问题。
  • 我的问题和这个链接一样[stackoverflow.com/questions/9682476/….我正在使用 Jboss 7 AS 而不是 Glassfish。我想问一下Jboss中的问题怎么解决。

标签: jsf utf-8 character-encoding http-request-parameters


【解决方案1】:

您链接到的问题已经排除了 DB 编码的原因,因为在保存到 DB 之前,在打印/重新显示提交的值期间已经发生了问题。因此,问题在于 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);
    }

    // ...
}

【讨论】:

  • 当我尝试在我的 application-context.xml 中使用:jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8 时,它给了我一个错误参考实体“characterEncoding”必须以 ';' 结尾分隔符,你能帮我解决这个问题吗
  • 难以置信。我们在 2014 年,使用最新的操作系统、JEE、应用服务器、数据库——全部 UTF-8。我们仍然需要一些解决方法来正确处理特殊字符。感谢您的解决方案!
【解决方案2】:

standalone.xml中,在标签http-listener name="default"中添加属性url-charset="UTF-8",在标签servlet-container中添加属性default-encoding="UTF-8"

【讨论】:

  • 以前的答案都不适合我。然后我发布了对我有帮助的内容。
【解决方案3】:

将此添加到JBOSS_HOME/standalone/configuration/standalone.xml 为我解决了这个问题:

<system-properties>
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
    <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>

https://developer.jboss.org/message/643825#643825得到它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2012-06-10
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    相关资源
    最近更新 更多