2012-05-23 9 views
10

プロジェクトの1つでは、フォームデータで英語以外のコンテンツ(フィンランド語)を使用できます。私たちはPrimeFacesでJSF 2.0を使用しています。私は問題をサーバーにデータを提出するときに持っています。フォームを送信すると、データが破損しています。フィンランド人だけがその中で堕落しています。JSFでUTF-8フォームを送信するとデータが破損しています

誰もがこの問題に直面して解決策を見つけましたか?

+0

送信中にファイルをアップロードしていますか?チェコ語でアプリを開発していますが、これはIceFacesファイルアップロードコンポーネントで発生しました。しかし、通常の場合、すべてうまくいきました。あなたはFinnishの文字セットを設定するためにFilterを使うことができましたが、それでも変なエラーです –

答えて

20

これはPrimeFaces 3.0以降の既知の問題です。これは、現在のHTTPリクエストがajaxリクエストであるかどうかをチェックする方法の変更によって発生します。リクエストヘッダーではなくリクエストパラメーターによって識別されています。 JSFビューが復元される前に要求パラメータが初めて取得されると、JSF独自のデフォルト文字エンコードUTF-8の代わりに、多くの場合、ISO-8859-1であるサーバーのデフォルト文字エンコードを使用して、すべての要求パラメータが解析されます。詳細はUnicode input retrieved via PrimeFaces input components become corruptedを参照してください。

解決策の1つは、request.setCharacterEncoding("UTF-8")を実行するフィルタを作成することです。

@WebFilter("*.xhtml") 
public class CharacterEncodingFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
     request.setCharacterEncoding("UTF-8"); 
     chain.doFilter(request, response); 
    } 

    // ... 
} 
+0

それは私のために以下のアノテーションで動作しました: @WebFilter(filterName = "CharacterEncodingFilter"、urlPatterns = {"/ *"}) ありがとう – Kiavash

+2

@ 'FacesServlet'は' * .xhtml'ではなく、 '/ faces/*'や '* .jsf'のようなものにマップされています。次に、フィルタのURLパターンを同じに変更する必要があります。 '/ *'は** HTTPリクエストごとに実際に**一致します。ちなみに、 '@WebFilter("/* ")'でも十分でした。 – BalusC

関連する問題