我在WebSphere 7上使用PrimeFaces 3.4和MyFaces 2.0.7 在日志中,我看到每个JSF资源集都调用了过滤器,包括以下资源: 但是,当我看到响应标头时,没有设置字符集,只有 默认情况下,JavaScript文件被视为UTF-8,因为消息显示正确,但我希望字符集设置正确。 我该怎么做?过滤器一直对我有效,为什么不在JSF/PrimeFaces中呢?这种方法是否遗漏了什么?<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>
http://localhost:9080/myapp/javax.faces.resource/myscript.js.xhtml?ln=mylib
Contet-Type
设置为application/x-javascript
。我的过滤器在web.xml中被声明为第一个,我唯一使用的另一个过滤器是org.primefaces.webapp.filter.FileUploadFilter
,它对字符编码不起任何作用。
我认为您的<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>
CCD_ 7应该是
<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
设置为服务器的默认编码。