2013-05-31 13 views
5

私はこのシナリオに遭遇しました。チェックボックスが選択されていない場合、strutsのチェックボックスタグによって送信される値

class MyForm extends IdSelectionForm { 
    private Boolean approveIt = true; 
    ..... 
} 

私はチェックボックスを選択して送信すると、私のJSTLフォームが

<html:checkbox property="approveIt" styleId="style1" value="true"/> 

で構成されています。 strutsのアクションでは、私はこのフィールドに真の値を設定します。 もう一度チェックを外して送信してください。それから、私も真の価値を得ます。私はそれがデフォルト値の何かであるかどうか疑問に思います。私がチェックを外すとfalseに上書きされますか?

答えて

5

まず、<html:checkbox>は、JSTLタグではなくStrutsタグです。このタグは単にタイプチェックボックスの標準HTML入力を生成します。 HTMLチェックボックスは、チェックされたときにその値をパラメータ値として送信し、チェックされていない場合はパラメータを送信しません。だから、

、フォームフィールドのデフォルト値はtrueですので、:

  • チェックボックスがチェックされている場合、それはチェックボックスがオフになっている場合、それはないでしょうStrutsの
  • によってtrueに設定されます

approveItプロパティのデフォルト値はfalseでなければなりません。これは、Strutsによって何かに設定されます。そうすれば、チェックボックスをオフにすると、デフォルト値(false)が維持されますが、これは正しいです。チェックボックスをオンにすると、trueに設定されますが、これも正しいです。

2

value属性には、タグが使用する値が含まれ、状態の場合は、checkedの場合はチェックされません。

送信時にチェックボックスのみが受け入れられます。その後、Strutsはそれらをキャッチし、対応するBeanプロパティを設定します。

値をインラインまたはコンストラクタごとに初期化する場合は、checkedのチェックボックスのみがBeanプロパティ値を設定して更新されます。チェックされていない状態は更新できません。

したがって、フォームが入力される前に値を設定しないでください。値が設定されていない場合、Strutsはその値をfalseとして扱い、checkedをタグから削除します。これは、明示的に値をfalseに設定することによって同等です。

true

値が、チェックボックスと反対の現象がないnullなくtrue又は(checked属性なし)チェックボックスcheckedまたはオフの状態に対応falseような他の値のための状態を有します。

2

私は同じ問題を抱えていました。 boolean変数がfalseに初期化された後も問題は解決されませんでした。

問題は私の範囲がsessionだったことです。

範囲をrequestに変更すると、すべて正常に動作します。