0

特殊文字(ö、ä.ñ、..)を入力すると、h:commandbuttonを介してPOSTされた値に問題があります。値がajaxリクエスト(値の変更リスナー、またはa4j:commandbuttonなど)を介して送信されると、すべてが機能します。ただし、値がh:commandbuttonを介して送信されると、受信した値が文字化けします。

BalusCの記事に従ってすべてを設定しようとしました。

JBossのstandalone.xmlでURIencondingを設定しました:

<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>

リクエストの文字エンコードを設定するフィルターを追加しました。ただし、これは何も変更しません。パラメータマップを取得する(エンコーディングを設定する前または後)と読んだ場合、パラメータはそこで混乱します。

私が見逃したものは他にありますか?

JBoss7.1.0と7.1.1およびrichfaces4.1.0で試しました。

編集:

ExternalContext#getRequestCharacterEncoding()がbeansアクションメソッドでUTF-8を返したとしても(コメントで尋ねられたように)、フィルターが問題であるように見えます。フォームがh:commandButtonを介して送信されるrequest.getCharacterEncoding()と、追加したUTFフィルターのdoFilter()メソッドの先頭でnullが返されます。しかしrequest.parametersParsed、すでに真実です。

値がajax経由で送信される場合、request.getCharacterEncoding()すでにUTF-8です。

したがって、エンコーディングの設定が異なり、他のフィルターが既にパラメーターを解析しているように見えます。内の他の唯一のフィルターはrequest.context.filterConfigsですorg.jboss.weld.servlet.ConversationPropagationFilter。さらに、Picketlinkはおそらくこの時点ですでにパラメータを読み取っています。

編集2:PLフォーラムの このスレッドで説明されているように、これはPicketlinkのバグのようです。関連するPLの問題も確認してください。

4

1 に答える 1

1

これまでのところ、すべてが正常に見えます。

この構成は、文字エンコードフィルターが要求本文の文字エンコードを設定する前に、他の何かが要求本文にすでにアクセスしている(したがって暗黙的に解析されている)場合にのみ失敗します。その場合、リクエスト本文の解析用の文字エンコードを設定するには遅すぎます。

コメントによると、ここではPicketLinkが原因のようです。UTF-8を使用するように指示する必要があります。それが不可能な場合は、開発チームでバグ/問題のレポートを報告してください。これはすべて、少なくともJSFの制御を超えているため、JSF関連の問題ではありません。

于 2013-02-23T17:13:34.820 に答える