我在 WebSphere 7 上使用 PrimeFaces 3.4 和 MyFaces 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
但是,当我看到响应标头时,未设置字符集,只有Contet-Type
设置为application/x-javascript
。我的过滤器在web.xml中被声明为第一个,我唯一使用的是org.primefaces.webapp.filter.FileUploadFilter
,它对字符编码没有任何作用。
JavaScript文件默认被视为UTF-8,因为消息显示正确,但我仍然希望正确设置字符集。
我该怎么做?过滤器一直在为我工作,为什么不在JSF / PrimeFaces?我错过了这种方法吗?
答案 0 :(得分: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>
修改强>
这是我对你的问题的误解。
使用<h:form enctype="multipart/form-data">
时,Primefaces中似乎存在一个错误。 MultipartRequest
对象使用平台的默认编码,而不是过滤器对请求对象的编码集。
见this answer for analysis and a workaround。另一种解决方法是将UTF-8
设置为服务器的默认编码。