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]を選択します。
そして、適当なフォルダにZIPを解凍します。(僕はCドライブ直下にしました)
次に、NetBeansにWildFlyのプラグインを追加する必要があります。
この手順は、下記の菊田さんのブログをご参照ください。
NetBeans 8でWildFlyが使えるようになるらしい! - Challenge Java EE !
菊田さんがこのブログを書かれたのは、NetBeans 8.0やWildFly 8.1.0 Finalが正式リリースされる前だったので、うまく動かなかったと書かれていますが、現時点のものであれば、上記の手順できちんと動作します。
WildFlyを起動したら、「http://localhost:8080/」にアクセスして、下記のような画面が表示されれば成功です。
さて、ここからJSFで簡単なサンプルを作ります。
名前を入力して送信すると、「こんにちは、●●さん!」と、入力した名前が表示されるアプリケーションです。
まず、プロジェクトを作ります。
NetBeansで[ファイル]-[新規プロジェクト]と選択します。
[カテゴリ]で[Java Web]、[プロジェクト]で[Webアプリケーション]を選択して、[次]をクリックします。
プロジェクト名を適当に設定して、[次]をクリックします。
[サーバー]でWildFly、[Java EEバージョン]で[Java EE 7 Web]を選択して、[次]をクリックします。
[フレームワーク]で[JavaServer Faces]を選択し、[構成]タブの[JSFサーブレットURLパターン]に「*.xhtml」と入力して、[終了]をクリックします。
これで、プロジェクトの作成は完了です。
ここから、プログラムを作っていきます。まずはManaged Beanです。
nameがリクエストパラメータで送られてくる名前、messageが最終的に表示されるメッセージです。
次に、名前入力画面(index.xhtml)です。
次に、結果表示画面(result.xhtml)です。
web.xmlは自動生成されたものを、そのまま使います。
さて、これで実行してみます。
リクエストパラメータの文字コードは全く設定していないため、日本語の名前を入力したら、そこだけ文字化けするはずです。
プロジェクトを右クリックして[実行]をクリックしたら、WildFlyが起動してアプリケーションのデプロイされ、ブラウザに画面が表示されます。
日本語の名前を入力して、送信ボタンをクリックします。
そうすると、下記のように名前の部分だけ文字化けします。
はい。ここまでは計算通りです。
問題はここから。
ブラウザの戻るボタンで入力画面に戻り、もう一度、日本語の名前を入力して、送信ボタンをクリックします。
そうすると・・・
化けないできちんと表示されています。なんでやねん。
1回目に送られた際に、何らかの方法で文字コードを取得しているのでしょうか・・・?
※ちなみに、同じアプリケーションをGlassFish 4.0上で動かしたら、想定通り毎回文字化けします。
ちなみに、WildFlyで文字化けを全く起こさなくするためには、フィルター使うか、WEB-INF/jboss-web.xmlに、下記のような文字コード設定を記述します。
WildFly - WildFly8.0.0CR1でPOSTパラメータの文字化けを回避する - @lbtc_xxx lab
こちらのブログでも、Ajax通信は文字化けしないと書いてありますし、謎ですね。。。