連載 役に立つXMLツール集(10)
XULとJSFでリッチクライアント 〜ロジック編〜 Page 1

XMLプログラミングでは、DOMやSAXといったAPIを使用すると単調なコードを繰り返し書くことになり生産性が上がらないものだ。本連載では開発者が“楽をする”ために役立つXML関連ツールを紹介していく。(編集局)

www.netpotlet.com
原田洋子
2004/8/18

はじめに

主な内容
--Page 1--
はじめに
JSF仕様の復習
--Page 2--
JSF利用者の5つのカテゴリ
JSPの指定方法
XULの定義
XUL定義へのJSF要素の組み込み
まとめ&サンプルダウンロード

 前回「XULとJSFでリッチクライアント 〜JSF編〜」では、JSF(JavaServer Faces)がどのような仕様であるかを説明し、仕様で定義されているレンダリングについてはXUL(ずーる:XML User Interface Language)を使ってどのように実装するかの説明まで行いました。今回はJSF仕様に従って実装するにはどうするのか、また、ロジックはどのように動くのかについて概要を説明します。さらに、クライアントがXULの場合はどのようにして実装すればいいのかについても説明します。

JSF仕様の復習

 JSF上でどのようにロジックが動くのかを理解するために、前回説明した「JSFのリクエスト処理ライフサイクル」を振り返ってみましょう。図1がJSFのリクエスト処理ライフサイクルでした。この中で、レンダリングに関係するUIコンポーネントツリーを生成する1つ目のRestore Viewと最後の部分、UIコンポーネントツリーから、XUL形式のレスポンスを生成するRender Responseについては前回実装まで行いました。今回は、2つ目のApply Request ValueからProcess Validations、Update Model Values、Invoke Applicationまでの4つを見ていきます。

図1 JSFのリクエスト処理ライフサイクル

 これまでは、この4つのステージについて簡単に触れた程度でしたので、もう少し詳しくプログラミングがどうなるのかを見てみましょう。

  1. 1. Apply Request Values
    • フォームに入力されたパラメータなどを取得する
    • UIコンポーネントツリーのルートノードに当たるUIViewRootのprocessDecodes()メソッドが実行される。さらに、ツリーの各UIComponentのprocessDecodes()メソッドが再帰的に実行される
    • 具体的な処理はprocessDecodes()メソッドから呼ばれる、UIComponentのdecode()メソッド内に記述する。Rendererを使っている場合は、Rendererのdecode()メソッド内に記述する
    • UIInputなどEditableValueHolderを実装しているコンポーネントのimmediateプロパティがtrueになっている場合、検証(Validation)と型変換(Conversion)が実行される
       
  2. 2. Process Validations
    • フォームなどにより取得した値が正当なものかどうかを検証する
    • UIコンポーネントツリーのルートノードに当たるUIViewRootのprocessValidators()メソッドが実行される。さらに、ツリーの各UIComponentのprocessValidators()メソッドが再帰的に実行される
    • Apply Request Valuesの段階で実行される検証を除き、faces-config.xmlでValidatorの実装クラスが登録されているか、UIInputやそのサブクラスのvalidate()メソッドが実装されている場合に検証が実行される
       
  3. 3. Update Model Values
    • データを維持しているモデルの状態を更新する
    • UIコンポーネントツリーのルートノードに当たるUIViewRootのprocessUpdates()メソッドが実行される。さらに、ツリーの各UIComponentのprocessUpdates()メソッドが再帰的に実行される
    • 具体的な処理はUIInputやそのサブクラスのupdateModel()メソッド内に記述する。このとき、どこで値を維持するかはUIComponentのsetValueBinding()メソッドを使って指定する
       
  4. 4. Invoke Application
    • ロジックを実行する
    • UIコンポーネントツリーのルートノードに当たるUIViewRootのprocessApplication()メソッドが実行される
    • 通常、このメソッドは実装しない。イベントがブロードキャストされるので、それを受け取ってロジックを実行するリスナをUICommandなどActionSourceの実装クラスのsetActionListener()メソッドを使ってセットしておく。あるいは、ActionSourceの実装クラスのsetAction()メソッドを使って、実行するメソッドをセットしておく

 以上のように、各処理はUIコンポーネントが実装しているメソッドをJSFコンテナが実行していきます。前回、JSFは“UIコンポーネント指向”ととらえると分かりやすいといいましたが、ここで説明したとおり、すべての処理の中心にUIコンポーネントがあるのが、JSFという仕様です。(次ページに続く)

  1/2

 Index
連載 役に立つXMLツール集(10)
XULとJSFでリッチクライアント 〜ロジック編〜
Page 1
・はじめに
・JSF仕様の復習
  Page 2
・JSF利用者の5つのカテゴリ
・JSPの指定方法
・XULの定義
・XUL定義へのJSF要素の組み込み
・まとめ&サンプルダウンロード


「連載 役に立つXMLツール集」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間