[Seasar-user:2413] Re: [S2JSF] 他の入力値を参照するvalidator
O.K.U.
oku
2005年 7月 22日 (金) 14:32:15 JST
O.K.U.です。
>instance属性をrequestにするとどうですか。
少なくともインスタンスはリクエスト毎に違っているようですが、
setter はセッションにつき1回しか呼ばれないようです。
後述するようなプログラムで検証してみました。
(1) Jboss起動。
(2) 該当formのあるページを表示
ここで、setterが起動される。validatorは起動されない。
ログ|setAnotherId: [E-MAIL ADDRESS DELETED],s=registForm:password
(3) 該当formにデータを入力し、submit ボタンをクリック。
validatorが起動される。インスタンスはsetterが呼ばれた時と別物。setterは起動されない。
よって、staticなエリアに保存しておいたものは参照できるが通常のデータメンバーは null
ログ|validate: this=[E-MAIL ADDRESS DELETED],id=null,s_id=registForm:password
(4) 再度(3)を実行
インスタンスは(3)とは別のものになっている。setterは起動されない。
ログ|validate: this=[E-MAIL ADDRESS DELETED],id=null,s_id=registForm:password
(5) 画面はそのままでJbossを再起動
setter は起動されない。
(6) そのまま再度、formにデータを入力し、submit ボタンをクリック。
setterは起動されてない。Jboss再起動によってstaticなエリアもクリアされているので、いずれも null
ログ|validate: this=[E-MAIL ADDRESS DELETED],id=null,s_id=null
【検証用プログラム】
public class EqualsValidator implements Validator {
private static Log logger = LogFactory.getLog(EqualsValidator.class);
private String anotherId;
static private String s_anotherId;
public void setAnotherId(String s){
logger.debug("setAnotherId: this=" + this + ",s=" + s);
anotherId = s;
s_anotherId = s;
}
public void validate(FacesContext context,
UIComponent component,
Object value) {
logger.debug("validate: this=" + this + ",id=" + anotherId + ",s_id=" + s_anotherId);
}
}
【dicon の定義】
<component name="equalsValidator" class="xxx.validator.EqualsValidator" instance="request">
<property name="anotherId">"registForm:password"</property>
</component>
Seasar-user メーリングリストの案内