NetBeans 8.0+WildFly 8.1.0 Final+JSF 2.2でHello,Worldしたら、最初の1回だけ文字化けする

表題の通り、やってみました。

 

まずは、WildFly 8.1.0 Finalをインストールします。と言っても、ZIPをダウンロードして解凍するだけです。

下記のサイトから、[8.1.0.Final]の[Java EE7 Full & Web Distribution]の[ZIP]を選択します。

Downloads · WildFly

そして、適当なフォルダにZIPを解凍します。(僕はCドライブ直下にしました)

 

次に、NetBeansWildFlyプラグインを追加する必要があります。

この手順は、下記の菊田さんのブログをご参照ください。

NetBeans 8でWildFlyが使えるようになるらしい! - Challenge Java EE !

 

菊田さんがこのブログを書かれたのは、NetBeans 8.0やWildFly 8.1.0 Finalが正式リリースされる前だったので、うまく動かなかったと書かれていますが、現時点のものであれば、上記の手順できちんと動作します。

WildFlyを起動したら、「http://localhost:8080/」にアクセスして、下記のような画面が表示されれば成功です。

f:id:MasatoshiTada:20140618163218p:plain

 

さて、ここからJSFで簡単なサンプルを作ります。

名前を入力して送信すると、「こんにちは、●●さん!」と、入力した名前が表示されるアプリケーションです。

 

まず、プロジェクトを作ります。

NetBeansで[ファイル]-[新規プロジェクト]と選択します。

[カテゴリ]で[Java Web]、[プロジェクト]で[Webアプリケーション]を選択して、[次]をクリックします。

f:id:MasatoshiTada:20140618163521p:plain

 

プロジェクト名を適当に設定して、[次]をクリックします。

f:id:MasatoshiTada:20140618163646p:plain

 

[サーバー]でWildFly、[Java EEバージョン]で[Java EE 7 Web]を選択して、[次]をクリックします。

f:id:MasatoshiTada:20140618163753p:plain

 

[フレームワーク]で[JavaServer Faces]を選択し、[構成]タブの[JSFサーブレットURLパターン]に「*.xhtml」と入力して、[終了]をクリックします。

f:id:MasatoshiTada:20140618164108p:plain

 

これで、プロジェクトの作成は完了です。

 

ここから、プログラムを作っていきます。まずはManaged Beanです。

nameがリクエストパラメータで送られてくる名前、messageが最終的に表示されるメッセージです。

f:id:MasatoshiTada:20140618164613p:plain

 

次に、名前入力画面(index.xhtml)です。

f:id:MasatoshiTada:20140618165332p:plain

 

次に、結果表示画面(result.xhtml)です。

f:id:MasatoshiTada:20140618165424p:plain

 

web.xmlは自動生成されたものを、そのまま使います。

f:id:MasatoshiTada:20140618165641p:plain

 

さて、これで実行してみます。

リクエストパラメータの文字コードは全く設定していないため、日本語の名前を入力したら、そこだけ文字化けするはずです。

プロジェクトを右クリックして[実行]をクリックしたら、WildFlyが起動してアプリケーションのデプロイされ、ブラウザに画面が表示されます。

f:id:MasatoshiTada:20140618170245p:plain

 

日本語の名前を入力して、送信ボタンをクリックします。

そうすると、下記のように名前の部分だけ文字化けします。

f:id:MasatoshiTada:20140618170435p:plain

はい。ここまでは計算通りです。

 

問題はここから。

ブラウザの戻るボタンで入力画面に戻り、もう一度、日本語の名前を入力して、送信ボタンをクリックします。

そうすると・・・

f:id:MasatoshiTada:20140618170630p:plain

 

化けないできちんと表示されています。なんでやねん。

1回目に送られた際に、何らかの方法で文字コードを取得しているのでしょうか・・・?

 

※ちなみに、同じアプリケーションをGlassFish 4.0上で動かしたら、想定通り毎回文字化けします。

 

ちなみに、WildFlyで文字化けを全く起こさなくするためには、フィルター使うか、WEB-INF/jboss-web.xmlに、下記のような文字コード設定を記述します。

WildFly - WildFly8.0.0CR1でPOSTパラメータの文字化けを回避する - @lbtc_xxx lab

こちらのブログでも、Ajax通信は文字化けしないと書いてありますし、謎ですね。。。