ゆーたんのつぶやき

株式会社ノークリサーチにてIT関連のシニアアナリストとして活動しています。

AjaxとJSF



随分と時間が経ってしまいましたが、自分用のメモも兼ねて
JavaOneTokyoのセッション関連記事をちょこちょこと書いて
おきたいと思います。
サーブレットスペックリード吉田豊氏によるAjaxJSF
関するセッションは旬の話題ということもあり大盛況でした。


セッションはXMLHttpRequestオブジェクトを使って、テキスト
ボックスに入力された文字を元に検索候補を表示させるという
シナリオ(Google Suggestみたいなもの)を主な題材にしての
解説でした。


[Ajaxが適している利用場面]
まずAjaxが適していると思われるケースとして以下が挙げられていました。
・オートコンプリート
・Master&Detailタイプの画面
・部分的なサブミット処理
・入力チェック(バリデーション)
・大量データをページに分けて表示するSHリ
・定期的なデータの更新チェック
Ajaxを使えば使い勝手の良いWebアプリケーションになる」
と安易に考えるのは禁物で、あくまで利用シーンを先に考えて、
その実現手段としてAjaxが適切かどうかを考えるというスタンス
が大切だと強調されていました。


[MVCAjax]
MVCはサーバーサイドで良く言われることですが、AjaxMVC
クライアントサイドで実現していると見なすこともできます。
ControllerはエンジンとなるJavaScript
ViewはCSSやDOM
ModelはXMLやHTMLなどの実データ
といった感じです。そういえば、Swingも各コンポーネント
MVC構造になっていて、UIの再描画とは独立してモデル更新を
行なうことができますね。
そういう意味ではクライアントサイドでのMVCの実現という観点
においてもAjaxは「古くて新しい」手法なのかも知れません。


[国際化に関する注意点]
Ajaxでは非同期のデータ通信そのものは従来のHTTPリクエスト/
レスポンスを利用します。ですが、HTMLコンテンツを返す時と
同じような感覚でShift_JIS決め打ちで作ってしまったりすると
後で厄介なことになりそうです。文字コードの設定やロケール
設定などを確認し、セッション管理用サーブレットを設けるのが
望ましいといったことが指摘されていました。


[JSFとの兼ね合い]
Javaを使ったWebアプリケーション開発においてJSFが今後重要な
位置を占めることはおそらく間違いないですので、AjaxJSF
関連は誰もが注目するポイントかと思います。
セッションではJSF上でのAjax利用に関して以下の3パターンが
挙げられていました。
パターン1: JSFのカスタムUIコンポーネントを使わない方法
パターン2: JSFのカスタムUIコンポーネントを使う方法
パターン3: Ajaxの非同期データ通信もJSFのライフサイクル内で処理する方法


パターン1は既に動作しているJSFアプリケーションがあり、そこに
ちょこっとAjax的要素を加えたいといった場合に適しています。
またAjaxのロジックはJSFとは独立してJavaScriptとして記述する
ことになるので、Ajax実装部分をPHPなどの他のサーバーサイド技術
でも流用したいといった場合に適しています。


パターン2はJavaScriptのロジックも含めてJSFのUIコンポーネント
の中にまとめてしまうという方法です。こうするとJSFの枠内であれば
再利用性が向上しますし、Webページを作成・管理する人はカスタム
タグを配置するだけで済み、煩雑なJavaScriptの存在を意識する必要
がありません。Webアプリケーションの開発基盤としてJSFを多用し、
Webページ側とロジック側の分業が多い場合には適していると思います。


最後のパターンは前の二つと比較するとかなり高度になります。
前の二つはJSFサーブレット(FacesServlet)とAjaxの非同期リクエス
/レスポンスを処理するサーブレットは別でしたが、最後のパターンでは
これらがJSFサーブレットに一本化されます。PhaseListenerを実装する
必要があるなどコーディング量は増えますが、JSFのビューステートへの
アクセスが可能になります。JavaOneが始まる前にAjaxJSFで利用する
際の課題としてコンポーネントツリーの同期が崩れてしまうという点に
ついて何度か触れましたが、パターン3を採用することでこの問題に対処
できるのではないかという気がします。さらにShaleをベースにして開発
をすればビューコントローラーを使ってより手軽にJSFライフサイクルの
コールバックメソッドを実装することができるので、そのあたりも活用
するとよりスマートなAjax利用ができそうです。


このセッションを通じて吉田氏が重ねて強調していたのは「何のために
Ajaxを使うのか?」というユーザー視点からのニーズを考えることを
忘れないようにしましょうというポイントです。Ajaxに限らず、最近は
リッチなWebアプリケーションへの期待が高まっていますが、ユーザー
のニーズを忘れて単に派手さやカッコ良さを追求するだけでは技術者の
自己満足になってしまいます。


Ajaxを使えば顧客満足度が上がる」とか「Ajaxを使えば売れる製品になる」
といったように真新しい呼び名を持つ技術に過剰な期待をかけてしまいたく
なるのが人情ですが (Ajaxに限らず、Flashも含めたリッチクライアント技術
全般にいえることですが) あくまでユースケースをベースに考え、そのユース
ケースを実現するのに最適な技術は何か?という順序で考えていくことが重要
だということをあらためて感じました。