[Seasar-user:15056] Re: [Teeda]チェックボックスの状態について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 7月 16日 (水) 17:00:16 JST


小林 (koichik) です.

Date:    Wed, 16 Jul 2008 09:42:47 +0800 (CST)
From:    gaofei714 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:15042] [Teeda]チェックボックスの状態について

> もし、userNameテキストフィールドに値を入力しない場合にはサブミットすると、
> 
> “値を入力してください”というようなエラーが出てきました。
> 
> 同時にprintingCancelFlgプロパティの値はなんとfalseになってしまいました。

1.disabled="disabled" の項目はリクエストパラメータに
含まれません (HTML の仕様).
そのため,サーバ側からはチェックされていないように
見えます.

2.バリデーションでエラーになった場合,リクエスト
パラメータはページクラスのプロパティに反映されません.

http://teeda.seasar.org/ja/extension/concept/lifecycle.html#JSFライフサイクルとの関係

・setXxx は UPDATE_MODEL_VALUES フェーズで行われる.
・UPDATE_MODEL_VALUES フェーズが実行されるのは
  ポストバックでバリデーションエラーが無かった場合のみ.

よって,printingCancelFlg は new SamplePage() の
直後の値 (false) になります.


バリデーションが成功しても,前述 1.の理由により,
disabled="disabled" なら printingCancelFlg は
false が設定されます.

回避するには,<input type="hidden"> を使って
以下のようにしてください.

<input type="checkbox" id="printingCancelFlg" disabled="disabled" />
<input type="hidden" id="printingCancelFlgHidden" />


public boolean  printingCancelFlg;

@PageScope
public boolean  printingCancelFlgDisabled;

public boolean getPrintingCancelFlgHidden() {
    return printingCancelFlg;
}

public void setPrintingCancelFlgHidden(boolean b) {
    if (printingCancelFlgDisabled) {
        printingCancelFlg = b;
    }
}



-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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