[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 メーリングリストの案内