java - JSF2 Form 到 DB 特殊字符处理

标签 java mysql jsf encoding jsf-2

我有最简单的 JSF2 表单,可以在 MySQL 数据库中插入表字段。

我的 facelet 有 <?xml version="1.0" encoding="UTF-8"?>在顶部。

我的输入类似于 <h:inputText value="#{testController.entity.test}" id="test" />

所以我尝试在我的 Jpa2/Hibernate 实体中插入“provà”。然后我坚持它,当我在我的 MySQL 数据库中查找保存的值时....

我找到“provÔ。这是同样的旧编码问题,我总是通过尝试和尝试来解决....

你能建议我先检查什么来修复它吗?

我的意思是,我知道这个问题缺乏信息,我只是想看看你问我什么:在你的问题中我会找到答案! :)

最佳答案

My facelet has <?xml version="1.0" encoding="UTF-8"?> at the top.

这与问题无关。这只会告诉 XML 解析器在将其解析为基于树的层次结构之前读取 XML 文件内容时使用哪个字符集。

您的具体问题可能有 2 个可能的原因:

  1. HTTP 请求字符编码设置不正确。然而,这不是正常情况,因为默认情况下 JSF/Facelets 已经在所有层中使用 UTF-8。但是,只要在 JSF/Facelets 设置正确的字符编码之前其他东西访问了 HTTP 请求主体,就会出现此问题。众所周知,PrimeFaces 3.x 可以做到这一点。另见 Unicode input retrieved via PrimeFaces input components become corrupted .解决这个问题的方法之一是创建一个看起来像 UTF-8 form submit in JSF is corrupting data 的过滤器。 .

  2. JDBC 连接字符编码设置不正确。 MySQL JDBC 驱动程序使用客户端平台默认字符编码而不是服务器表字符编码。确保您的 MySQL JDBC URL 如下所示:

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

关于java - JSF2 Form 到 DB 特殊字符处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11029462/

相关文章:

java - 如何更改 ActionBar 的颜色

java - Cassandra 连接问题 spring mvc

java - 如何使用 Java 从网站检索 URL?

mysql - 选择具有双重限制的 MySQL

php - 在mysql中存储页面id

jquery - 如何用jsf reRender或ajax加载替换html内容,并用AngularJS重新绑定(bind)新的DOM?

java - 如何更改(数据库)变量中的 jspinner 日期最小值和最大值?

mysql - 卡在存储过程上

jsf - 在 JSF 命名 bean 中注入(inject) Java 对象

jsf - 如何从 View 中为 jsf 支持 bean 设置隐藏值