JSF <h:inputText/> 字符编码问题
Posted
技术标签:
【中文标题】JSF <h:inputText/> 字符编码问题【英文标题】:JSF <h:inputText/> character encoding issue 【发布时间】:2013-11-23 09:04:48 【问题描述】:我在这个主题上通过了许多“谷歌”,但没有任何帮助。 问题是,我在每个可以拥有(甚至不能拥有)的地方都设置了 UTF-8 编码,但是从 inputText 检索的数据仍然损坏。 我使用 JSF、Primefaces 和 Hibernate。 当我发布到页面时,它会从 DB 正确呈现,在 html doc 中写为纯文本,甚至是 bean 答案。
<h:outputText value="text cez OT: čerstvejší"/><br/>
text cez IDE: čerstvejší<br/><br/>
<h:outputText value="text cez OT_beans: #temp.dia"/><br/>
text cez IDE_beans: #temp.dia<br/><br/>
<h:outputText value="text cez OT_DBS: #temp.getDBS()"/><br/>
text cez IDE_DBS: #temp.getDBS()<br/>
另外,当我将变量的设置器设置为此:
public String getName()
return "načítané z aplikácie";
它正确呈现。 只有当我从页面发布任何“ľščťžýáíé”字符时,它才会损坏为Ä?和常见的字符。 它在 NetBeans 管理的 Appache Tomcat 7.0.34 上运行,带有 CDI、JSF 2.2、Primefaces 3.5、Hibernate 3.2.5。 UTF-8 编码集的地方:
meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 在每个标题中
连接器端口="8080" 协议="HTTP/1.1" 连接超时="20000" 重定向端口="8443" Appache 服务器上的 URIEncoding="UTF-8"/> 和 Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
f:view encoding="UTF-8" contentType="text/html">
我也有 webFilter,但没有帮助:
@覆盖 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException request.setCharacterEncoding(编码); response.setCharacterEncoding(编码); 链.doFilter(请求,响应);
有什么帮助吗?其他问题?谢谢!`在此处输入代码
【问题讨论】:
您究竟在哪里观察到损坏的字符?在System.out.println()
控制台?或者直接在数据库中使用一些数据库管理工具?还是在提交表单后呈现的 HTML 输出中?
println (setValue),也在 DB 中,当我尝试保存(由 Heidi 观察)时,也在 inputText 中渲染了 HTML(由无操作按钮刷新),还有使用相同 #value 的 outputText。
【参考方案1】:
问题是,在 Tomcat 7 上使用 CDI 需要 org.jboss.weld.environment.servlet.Listener
,它使用不同的编码(我认为)。解决方法是在weld listener之前配置org.apache.catalina.filters.SetCharacterEncodingFilter
和org.jboss.weld.servlet.ConversationFilter
。
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter>
<filter-name>Conversation</filter-name>
<filter-class>org.jboss.weld.servlet.ConversationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Conversation</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
【讨论】:
【参考方案2】:也许您的数据库中的编码不是 UTF-8。您可以在数据库上执行 show create table 时进行检查。
【讨论】:
它是UTF-8,因为当我从源代码中写入时它会正确,也获取等于设置:UTF-8。以上是关于JSF <h:inputText/> 字符编码问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JSF 中构建“编辑”按钮并在 h:outputText 和 h:inputText 之间切换
如何在 jsf 中动态添加 h:inputText 而不会丢失之前动态添加的 h:inputText 值? [复制]