1

我在WebSphere 7上使用PrimeFaces 3.4MyFaces 2.0.7。我正在使用过滤器将响应编码设置为 UTF-8:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
<filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

在日志中,我看到每个 JSF 资源集都调用了过滤器,包括以下资源:

http://localhost:9080/myapp/javax.faces.resource/myscript.js.xhtml?ln=mylib

但是,当我看到响应标头时,未设置 charset,仅Contet-Type设置为application/x-javascript. 我的过滤器在 web.xml 中声明为 first,我使用的唯一其他过滤器org.primefaces.webapp.filter.FileUploadFilter对字符编码没有任何作用。

JavaScript 文件默认被视为 UTF-8,因为消息显示正确,但是我希望正确设置字符集。

我该怎么做?过滤器总是为我工作,为什么不在 JSF/PrimeFaces 中?我错过了这种方法吗?

4

1 回答 1

0

<filter>我认为您的/<servlet>声明有些混乱

Servlet应该是

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

并且Filter应该是

<filter>
    <filter-name>Your filter</filter-name>
    <filter-class>com.yourpackage.YourFilterClass</filter-class>
</filter>
<filter-mapping>
    <filter-name>Your filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

此外,当您使用 JSF 时,标题会在您的视图中设置,很可能是*.xhtml文件。您可以在那里显式设置字符编码:

<h:head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF8" />
</h:head>

编辑

这是我对你的问题的误解。

Primefaces 中似乎存在一个源于使用<h:form enctype="multipart/form-data">. MultipartRequest对象使用平台的默认编码,而不是过滤器在请求对象上设置的编码。

请参阅此答案以进行分析和解决方法。另一种解决方法是设置UTF-8为服务器的默认编码。

于 2013-02-14T08:46:16.307 回答