如何在PrimeFaces应用程序中设置JSF资源的字符编码



我在WebSphere 7上使用PrimeFaces 3.4MyFaces 2.0.7

<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中呢?这种方法是否遗漏了什么?

我认为您的<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设置为服务器的默认编码。

相关内容

  • 没有找到相关文章

最新更新