2

我尝试将 UTF-8 字符串作为f:viewParam值传递,但值显示为垃圾字符串,我添加了 EncodingFilter 以web.xml将 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 对此进行了测试

4

1 回答 1

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 请求。

也可以看看:

于 2012-02-15T00:08:40.043 回答