私はこのトピックにかなり苦労したので、これについて一言できると思います。
ofに関する公式ドキュメントに記載されている内容は次のとおりです。fieldValue
<s:checkbox>
Name fieldValue
Required FALSE
Default TRUE
Evaluated FALSE
Description The actual HTML value attribute of the checkbox.
しかし、それは何も言っていません。次のように変更することをお勧めします。
を使用すると、型の値をアクション クラスにfieldValue
送信できます。String
その意味は:
- 文字列が文字どおり
"true"
or"false"
であり、アクション クラスの変数が型の場合、文字列は自動的にブール値に解析され、型変数boolean
に格納されます。boolean
- まったく定義
fieldValue
しない場合、文字列型のデフォルト値"true"
は、それを保持するために Action クラスで定義されている場合、常に変数に送信されます。
設定してもチェックボックスがチェックされていない場合、バックエンドには何も送信されないことに注意してください。つまり、チェックボックスの値を受け取る type フィールドは になります。fieldValue
String
null
しかし、それ以上のことができます。<s:checkbox />
Struts 2 Action クラス フィールドの命名規則を組み合わせた実際の例を見てみましょう。
たとえば、選択するユーザーのリスト用のチェックボックスのリストがあり、各チェックボックスには処理対象が含まれているidUser
とします。タスクを実行するために複数を解析したい場合はidUser
、次のように定義できます。
<s:iterator value="listUsers">
<s:checkbox name="userId" id="userId" fieldValue="%{idUser}"
....
</s:iterator>
これで、アクション クラスで数値のリストを受け取りますが、同じname
. 次に、タイプまたは配列のフィールドを定義して、List<String>
これらすべてのユーザー ID を受け取ります。
private List<String> userId;
そのゲッター/セッターで。次に、このリストで必要なことを行うことができます。それらを使って計算したい場合は、これらの数値を Integer/Long/Whatever に解析する必要があることに注意してください。
さらに、「はい/いいえ」または「1/0」、または「放射/悲惨」をチェックボックスに送信したい場合 (名前を付ければ、私がプレイしているゲームがわかります)、単純な JavaScript 関数を配置できます。このチェックボックスのonchange
イベントでは、そのステータスを監視するか、より簡単にアクション クラスでその値を解析します。
私たちが持っている場合:
<s:checkbox id="myCamp" name="myCamp" fieldValue="radiant"></s:checkbox>
アクション クラスでは、次のものが必要です。
String myCampString = null;
if (StringUtils.isBlank(myCamp)){ //myCamp = null, means I am in Dire.
myCampString = "dire";
} else if (myCamp.equalsIgnoreCase("radiant")){ //myCamp = "radiant", means I am in Radiant.
myCampString = "radiant";
}
// then we process myCampString, now it cannot be null.
************************** 私は真ん中の川です ***************** *************
に関してはvalue="true"/"false"
、私たちプログラマーが物事に適切な名前を付けることができず、誰もが私たちが話していることを理解できると考えている良い例だと思います:)。preselected
/selectByDefault
など、より明確な名前を付けることができます。
もう一度、Struts 2 DOC を参照すると、次のようになります。
Name value
Required FALSE
Default
Evaluated FALSE
Type String
Description Preset the value of input element.
実際には、次のようにするとよいでしょう。
value
<s:checkbox>
初めてレンダリングするときに、このチェックボックスをオンにするかどうかを定義します。(*)
(*)value
ページの読み込みが完了した後に変更があった場合、Struts 2 は<s:checkbox />
ステータスを変更するために値を入力しないことに注意してください。AngularJS などの JavaScript 関数がこの部分を担当します。
たとえば、フォームを使用して新しいUser
フォームを作成したい場合、デフォルトではすべてactive
のユーザーが作成されたときに、次のように配置できます。
<s:checkbox name="isActive" id="isActive" value="true"></s:checkbox>
しかし、ユーザーを編集する形で、ユーザーがアクティブなときにチェックし、アクティブでないときにチェックしないようにしたい場合は、次のようにします。
<s:checkbox name="isActive" id="isActive" value="%{user.isActive}"
DOC はそれを明確にしていますが (著者のやり方で、私は思います)、それはそれをより理解しやすくするためのいくつかのヒントです。