[Seasar-user:12420] Re: tbody内のinput値がValidatorメソッドで取得できません。

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 1月 9日 (水) 18:00:08 JST


小林 (koichik) です.

Date:    Wed, 9 Jan 2008 14:03:38 +0900
From:    "gaku furukawa" <[E-MAIL ADDRESS DELETED]>
To:       <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:12414] tbody内のinput値がValidatorメソッドで取得できません。

> seasar + teeda で、tbodyの中にinput text のコンポーネントを配置して、
> その値を getXXXValidator メソッド内で、チェックしたいと思っていたのですが、
> validatorメソッド内では値を取得することができませんでした。
> tbodyに指定したitemsオブジェクトもValidatorメソッド内ではnullになっていまし
> た。

JSF の仕様ですね.
JSF では,処理を 6 つのフェーズで行います.

1.RESTORE_VIEW
2.APPLY_REQUEST_VALUES
3.PROCESS_VALIDATIONS
4.UPDATE_MODEL_VALUES
5.INVOKE_APPLICATION
6.RENDER_RESPONSE

入力パラメータの内容は 2 の APPLY_REQUEST_VALUES
フェーズで UIComponent ツリーに反映され,
4 のUPDATE_MODEL_VALUES フェーズで Page に
反映されます.

+---------+   2   +-------------+   4   +------+
| request | ----> | UIComponent | ----> | Page |
+---------+       +-------------+       +------+

詳細は JavaExpert #02 の Teeda 特集や,
JSF の解説などを参照してください.

getXxxValidator() は 3 の PROCESS_VALIDATIONS
フェーズで呼び出されるので,Page クラス側の情報を
参照することはできません.
# できるけど,コンテナから取得された状態のままで
# リクエストの内容は反映されてない.

getXxxValidator() でリクエストの内容を見るには,
Page クラスに Map 型の param プロパティを
持たせてください.

forEach を使っているとリクエストパラメータを
チェックするのはかなり大変だと思うので,
getXxxValidator() で頑張るよりは,Validator の
中で頑張る方がまだいいんじゃないかと思います.

> doXXX メソッドへ移ると、tbody に指定したItemsオブジェクトから、
> 値を取得することができたのですが、

doXxx() は INVOKE_APPLICATION フェーズで
呼び出されるためです.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>



Seasar-user メーリングリストの案内