プロジェクトの 1 つでは、フォーム データで英語以外のコンテンツ (フィンランド語) を利用できます。PrimeFaces で JSF 2.0 を使用しています。データをサーバーに送信するときに問題が発生しました。フォームを送信すると、データが破損しています。その中で腐敗しているのはフィンランドのキャラクターだけです。
誰かがすでにこの問題に直面し、解決策を見つけましたか?
プロジェクトの 1 つでは、フォーム データで英語以外のコンテンツ (フィンランド語) を利用できます。PrimeFaces で JSF 2.0 を使用しています。データをサーバーに送信するときに問題が発生しました。フォームを送信すると、データが破損しています。その中で腐敗しているのはフィンランドのキャラクターだけです。
誰かがすでにこの問題に直面し、解決策を見つけましたか?
これは、PrimeFaces 3.0 以降の既知の問題です。これは、現在の HTTP リクエストが ajax リクエストであるかどうかを確認する方法が変更されたことが原因です。リクエスト ヘッダーではなく、リクエスト パラメータによって識別されています。JSF ビューが復元される前にリクエスト パラメータが初めて取得されると、すべてのリクエスト パラメータは、JSF 独自のデフォルト文字エンコーディング UTF-8 ではなく、多くの場合 ISO-8859-1 であるサーバーのデフォルト文字エンコーディングを使用して解析されます。詳細な説明については、「PrimeFaces 入力コンポーネントを介して取得された Unicode 入力が破損する」を参照してください。
解決策の 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);
}
// ...
}