• 検索結果がありません。

ActionResult

ドキュメント内 devadapt.book (ページ 154-160)

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 Regular

Expression

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 の機能について説明し ます。

8

設計時

GUI

の開発

ドキュメント内 devadapt.book (ページ 154-160)