我尝试将UTF-8字符串作为f:viewParam
值传递但值显示为垃圾字符串,我在web.xml
中添加了EncodingFilter,用于将UTF-8设置为请求和响应,如下所示
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
我定义了此样式的facelet页面,但问题未解决
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<f:metadata>
<f:viewParam name="q" value="#{searchBean.query}"/>
</f:metadata>
.....
</html>
我使用Myfaces 2.0.5和Mojarra 2.0.5进行测试
答案 0 :(得分:2)
显然,您正在使用服务器配置,默认情况下使用不同的字符编码来解释GET查询字符串。例如,Tomcat默认将它们解释为ISO-8859-1。您需要打开Tomcat的/conf/server.xml
并将URIEncoding
属性添加到<Connector>
元素,其值为UTF-8
。
<Connector ... URIEncoding="UTF-8">
过滤器完全没必要。去掉它。 Facelets上的JSF 2.x默认在所有级别都是UTF-8。此外,HttpServletRequest#setCharacterEncoding()
不会影响GET请求,它只影响POST请求。