我在使用 <p:rowEditor>
编辑表格时遇到一些问题
我使用encoding='windows-1252'
能够使用瑞典语字符 (å, ä, ö)
。创建一个实体工作正常,但是当我在 <p:dataTable>
中编辑它时使用<p:cellEditor>
它会提交意想不到的字符。 (如果我输入 "åäö"
并保存编辑(使用 p:celleditor
),数据库中的表包含 "åäö"
)。
我的 xhtml 页面是这样开始的:
<?xml version='1.0' encoding='windows-1252' ?>
<!DOCTYPE html>
<html...
我尝试过使用字符编码过滤器:
public class CharacterEncodingFilter implements Filter {
private static String ENCODING = "windows-1252";
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(ENCODING);
response.setCharacterEncoding(ENCODING);
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig config) throws ServletException {
}
}
但是没有效果。知道为什么 incell 编辑帖子使用不同的字符编码吗?
使用:
- NetBeans 7.0.1
- 玻璃鱼3.1
- Primefaces 3.0.M4
最佳答案
If i enter "åäö" and save the edit (using p:celleditor), the table in the database contains "åäö"
这是 UTF-8 编码字符的典型 CP1252 表示形式。在 UTF-8 中,这些字符由以下字节表示:
如果您在 CP1252 codepage layout 中查找这六个单独的字节,您会看到它们准确地代表了那些字符 åäö
.
JSF/Facelets 在生成 HTML 响应和处理 POST 请求时默认使用 UTF-8 字符编码。该 XML encoding
属性实际上并没有改变任何东西。它只是告诉 XML 解析器您写入/保存文件的字符编码,以便它可以使用正确的字符编码来解析它。
更改 HTML 响应的字符编码和 POST 请求的处理是通过设置 encoding
来完成的。 View 根标签的属性<f:view>
:
<f:view encoding="CP1252">
但是,我强烈不建议这样做。这样,您就可以从支持超过 100 万个字符的通用字符编码回退到支持不超过 255 个字符并且只能被 Windows 平台理解的专有字符编码。使用 Mac/Linux 或任何其他操作系统的网页访问者将无法正确解释该字符编码的 HTML 响应,也无法以该字符编码发回数据。您的网络应用程序还没有准备好成功统治世界。
您需要以不同的方式解决这个问题。显然您的数据库需要更改为支持 UTF-8。无法回答到底如何做到这一点,因为您没有告诉任何有关数据库品牌/版本的信息。但是更改数据库/表的字符编码应该是一些 SQL 命令的问题。或者,如果您正在尝试,只需截断数据库并使用正确的字符集重新创建它即可。有关详细信息,请参阅特定于数据库的 SQL 手册。
另请参阅:
关于java - 字符编码不适用于 PrimeFaces CellEditor 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446714/