com.bea.web.ActionResult
ActionResultでは、 要求の処理結果がカプセル化さ れます。 ま た、
ControllerServletには、 次に表示するページ を決定する ための情報が提供さ れます。
Word と子孫ク ラ ス
com.bea.web.validation.Word
Web アプ リ ケーシ ョ ンのすべて フ ィ ール ド について、 その有効性を一定の範囲
で検証する必要があ り ます。com.bea.web.validation.Word ク ラ スおよびその 子孫オブジ ェ ク ト に よ り 、 フ ォーム中の各フ ィ ール ド の有効性を検証する ための ロ ジ ッ ク が提供さ れます。 無効な フ ィ ール ド があ る と 、Wordオブジ ェ ク ト は メ ッ セージ バン ド ルを使用し て、 該当する フ ィ ール ド に応じ て イ ン ターナシ ョ ナ ラ イ ズ ま たは ローカ ラ イ ズ さ れたエ ラー メ ッ セージ を検索し ます。 ADK で は、 表 8-1 に示すカ ス タ ム バ リ データ が提供さ れます。設計時 フ ォ ーム処理の概要
アダプ タの開発
8-5
AbstractInputTagSupport と子孫ク ラ ス
com.bea.web.tag.AbstractInputTagSupport
Web ツールキ ッ ト で提供 さ れる タ グ ク ラ スには以下の機能があ り ます。
フ ォーム フ ィ ール ド用の HTML を生成し、 必要に応じ て フ ィ ール ド にデ フ ォル ト 値を設定し てお く 。
入力 さ れた値が無効な場合に、 フ ォーム フ ィ ール ド の横に ローカ ラ イ ズ し た エ ラー メ ッ セージ を表示する。
ControllerServlet
がフ ォームのフ ィ ール ド 名を使っ て、 検証オブジ ェ ク
ト にア ク セスで き る よ う に、com.bea.web.validation.Wordを初期化し てWeb
アプ リ ケーシ ョ ン ス コープに保存する。表
8-1 Word
オブジ ェ ク ト のカス タムバリデータバリデータ フ ィ ールド に対する値の決定
Integer 指定 さ れた範囲内の整数値であ る かど う か を判断す る。
Float/Double 指定 さ れた範囲内の浮動小数点数にな っている かど う
か を判断す る。
Identifier 有効な
Java
識別子であ る か ど う かを判断する 。 Perl 5 RegularExpression
Perl 5
の正規表現に一致する か ど う かを判断する 。URL (ユーザに よ り 入力 さ れた も のが) 有効な
URL
であ る か ど う かを判断する 。Email (ユーザに よ り 入力 さ れた値が) 有効な電子 メ ールア ド
レ ス か ど う かを判断する 。
Date (ユーザに よ っ て入力 さ れた値が) 指定の日付
/
時間 フ ォーマ ッ ト に従っ てお り 、 有効な日時にな っ てい る か ど う かを判断する 。8
設計時GUI
の開発発行タ グ
こ れ以外に、 ADK では次の よ う な発行タ グ を使用で き ます。
<adk:submit name='xyz_submit' doAction='xyz'/>
こ の タ グによ り 、doActionパ ラ メ ータが要求中の ControllerServletに送ら れます。 こ の結果、ControllerServletか ら登録済の RequestHandlerで xyz() メ ソ ッ ド が呼び出さ れます。
フ ォーム処理シーケンス
こ の節では、 フ ォーム を処理する順序について説明し ます。
前提条件
フ ォームを処理する ための前提条件は、 以下の と お り です。
1.
カ ス タ ム ADK 入力タ グ を使用し た JSP が HTTP 応答オブジ ェ ク ト に書き込 まれ る と き、 こ の タ グに よ り com.bea.web.validation.Wordの イ ン ス タ ン スがオブジ ェ ク ト に よ っ て初期化 さ れ、 入力フ ィ ール ド 名を キー と し て、Web
アプ リ ケーシ ョ ン ス コープに こ の イ ン ス タ ン スが格納さ れ る こ と 。 こ の よ う な タ グに よ り 、ControllerServletで検証オブジ ェ ク ト が使え る よ う に
な る ため、 まず HTTP 要求を大まかに検証し てか ら、RequestHandlerに要 求を出すこ と ができ ます。 次にその例を示し ます。<adk:int name='age' minInclusive='1' maxInclusive='120' required='true'/>
2. JSP
エンジンが com.bea.web.tag.IntegerTagSupportの イ ン ス タ ン スで doStartTag() メ ソ ッ ド を呼び出し た時点で、 こ のタ グの HTML が生成 さ れる こ と 。IntegerTagSupportイ ン ス タ ン スに よ り 、
com.bea.web.validation.IntegerWordの新し い イ ン ス タ ン スが作成さ れ、
こ れがキー ageに基づいて Web アプ リ ケーシ ョ ン ス コープに追加 さ れます。
ま た、ControllerServletでは、 対応する ServletContextか ら
IntegerWordイ ン ス タ ン ス を検索でき ます。 検証では、 年齢に送 られた値が
1 以上、 かつ 120 以下であ る こ と が確認さ れます。
設計時 フ ォ ーム処理の概要
アダプ タの開発
8-7
3. HTML
フ ォームでは、doAction と い う 非表示フ ィ ール ド を発行する必要があ り ます。 こ のフ ィ ール ド の値は、ControllerServletがフ ォーム処理を 実行する RequestHandler上の メ ソ ッ ド を特定する と き に使用さ れます。
こ れ ら前提条件に従 う と 、 コー ド リ ス ト 8-1 のよ う な JSP フ ォームが表示 さ れま す。
コー ド リ ス ト
8-1 JSP
サンプルフ ォ ーム<form method='POST' action='controller'>
Age: <adk:int name='age' minInclusive='1' maxInclusive='120' required='true'/>
<adk:submit name='processAge_submit' doAction='processAge'/>
</form>
シーケンスの手順
フ ォーム処理の実行方法を、 順を追っ て次のダ イ アグ ラ ムに示し ます。
8
設計時GUI
の開発図
8-1 UI
フ ォ ーム処理シーケ ン スは次の と お り です。
1.
ユーザが、 以下の内容のフ ォーム を発行し ます。age=10,
doAction=processAge.
2.
ControllerServletが HTTP 要求か ら年齢フ ィ ール ド のデータ を読み込み ます。3.
ControllerServletは
ageを キー と し て使用し て、
ServletContextか ら
com.bea.web.validation.Wordを検索し ます。 こ のオブジ ェ ク ト は、com.bea.web.validation.IntegerWordの イ ン ス タ ン スです。
4.
ControllerServletが Word イ ン ス タ ン スで validate()メ ソ ッ ド を呼び出 し、 パ ラ メ ータ と し て 10 を渡し ます。設計時
GUI
の機能アダプ タの開発
8-9 5. Word
イ ン ス タ ン スに よ り 、 こ の値 10 が 1 以上 120 以下の値であ る こ と が判断さ れます。
6.
ControllerServletがセ ッ シ ョ ンか ら RequestHandlerを検索、 ま たは作 成し て、handlerと し て こ れをセ ッ シ ョ ンに追加し ます。7.
ControllerServletは、 Java Reflection API を使用し て、processAge()を 探し、RequestHandlerで こ の メ ソ ッ ド を呼び出し ます。 こ の メ ソ ッ ド が存 在し ない場合は、 例外が生成さ れます。 メ ソ ッ ド のシグネチャは、 次の と おり です。
public ActionResult processAge(HttpServletRequest request) throws Exception
8.
RequestHandlerは、 フ ォームの入力データ を処理し た後、
ActionResult オブジ ェ ク ト を返し て処理の結果を示し ます。ActionResultには、ControllerServlet
が次に表示するページ を判断する ための情報が格納 さ
れます。 次のページの情報には、 Web アプ リ ケーシ ョ ン内に表示する別のJSP
や HTML のページの名前な どがあ り ます。 た と えば thanksに よ り 、 thanks.jspページが表示さ れます。9.
ActionResultが正常に実行 さ れる と 、ControllerServletに よ り HTTP 応 答 が Web アプ リ ケーシ ョ ンの表示ページに リ ダ イ レ ク ト さ れます。 ADK で は、 表示ページは通常、display.jspと な り ます。10.
display.jspページには、contentパ ラ メ ータ (た と えば、thanks.jsp) に よ り 指定 さ れる JSP があ り ます。 こ れに よ り 、 JSP がユーザに表示さ れま す。設計時 GUI の機能
設計時 GUI の開発では、 実行時アダプタ を開発する場合 と は異な る独自の機能 を使用し ます。 こ の節では、 設計時 GUI の機能について説明し ます。