JSFのRI1.1を使っている際に少し前から気になっていることがあります。
あるパターンの時に生成されるHTMLの日本語コンテンツが
『#&12354;』のようなHTMLユニコード形式になってしまうというものです。社内システム
での利用であれば問題はないかも知れませんが、一般向けサイトなどで検索
エンジンに引っ掛けたいなどといった場合にはあまり好ましくないですね。
発生する条件としては
1. 下記のようにfaces-config.xmlにナビゲーションとBackingBeanを定義
<navigation-rule> <from-view-id>/input.jsp</from-view-id> <navigation-case> <from-outcome>Next</from-outcome> <to-view-id>/output.jsp</to-view-id> </navigation-case> </navigation-rule> <managed-bean> <managed-bean-name>TestBean</managed-bean-name> <managed-bean-class>sample.TestBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
2. 下記のようにそれぞれのjspファイルを作成
input.jsp <f:view> <h:form> <h:inputText id="name" value="#{TestBean.name}" /> <h:commandButton id="button" value="push" action="Next"/> </h:form> </f:view> output.jsp <f:view> <h:outputText value="#{TestBean.name}" /> </f:view>
ここで、input.jspでテキストフィールドに日本語文字列を入力し、
ボタンを押してoutput.jspに遷移させると、表示結果のHTMLには
入力した日本語文字列がHTMLユニコード形式で書き込まれています。
ところが、output.jspを直接呼び出して表示させた場合にはきちんと
指定した文字コードで書き込まれます。つまりナビゲーションルール
で定義された遷移をした後に表示される画面についてのみ、日本語が
HTMLユニコード形式でレンダリングされてしまうという現象が起こる
ようです。
ブラウザで表示する限りにおいては問題がないので、気が付きにくい
のですが、書籍に付属しているサンプルなどでも同現象が再現します。
バグデータベースなどをチェックしてみたのですが、該当するものを
探し出すことができませんでした。
現象からするとナビゲーションハンドラ辺りに問題がありそうな感じ
ではありますが、RIのコードをあれこれいじくるのもリスキーなので
とりあえずはフィルターを使って変換させることで回避しています。
この動きってもしかして周知の事実なんでしょうかね?パラメータを
ちょいちょいと設定することで解消できるのであれば良いのですが。
何かご存知の情報がありましたらお寄せいただけると大変助かります。