JSF2表单到DB特殊字符处理

时间:2012-06-14 08:35:47

标签: 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Ô。这是我通过尝试和尝试来解决的旧编码问题....

你能建议我先修一下来修理它吗?

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

2 个答案:

答案 0 :(得分:1)

  

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

这与问题无关。这只告诉XML解析器在读取XML文件内容之前使用哪个charset,然后再将其解析为基于树的层次结构。

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

  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
    

答案 1 :(得分:0)

尝试在您的xhtml中设置 h:form acceptcharset =“UTF-8” (为我工作):