1

WebSphere 7PrimeFaces 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 で最初に宣言されています。私が使用しているのは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 に答える