3
  • value属性のみを持つとは異なり、タグにfieldValue属性だけでなくvalue属性も必要なのはなぜですか?s:checkboxs:textfield

  • s:checkboxタグの属性は、「 true」または「falsefieldValue 」以外の文字列を許可していますか? Struts2 in Action (Manning) では、属性について述べていますfieldValue

チェックボックスによって送信される実際の値。多分本当か嘘か

つまり、私が使用する場合

<s:checkbox name="wantMoreChocolates" fieldValue="true"/>

その場合、wantMoreChocolateは Java クラスの Boolean 型にしかできません。その場合、ドキュメントで fieldValue の型を Boolean ではなく String に指定するのはなぜですか?

  • また、値プロパティについては、

value 属性は、他の UI コンポーネントと同様に、コンポーネントがバインドされている実際の Java 側のプロパティ (この場合はブール値) を指します。

コンポーネントがバインドされる実際のプロパティを「値」で指定する場合、 name 属性の役割は何でしょう。name 属性は Boolean 値を指さなければならないのに、なぜ value 属性を使用して別の boolean にバインドする必要があるのでしょうか?

  • name 属性に対応するプロパティのみに基づいて事前設定を行うことができないのはなぜですか
4

4 に答える 4

9

私はこのトピックにかなり苦労したので、これについて一言できると思います。

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 フィールドは になりますfieldValueStringnull

しかし、それ以上のことができます。<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 はそれを明確にしていますが (著者のやり方で、私は思います)、それはそれをより理解しやすくするためのいくつかのヒントです。

于 2016-03-04T11:47:29.497 に答える
1

つまりfieldValue、チェックボックスの実際のHTML値属性であり、チェックボックスによって送信されます。これはデフォルトでtrueであるため、通常、この値を設定する必要はありません。

一方、valueパラメータは入力要素の値をプリセットするために使用されます。Struts2フォームタグドキュメントを読んで、その動作を正確に理解してください。

于 2012-04-05T11:54:46.320 に答える
0

fieldValueチェックボックスによって送信されるチェックボックスの値属性です。、(true/false) など、要件に応じて

fieldValue指定できます。詳細については、このリンクhttp://www.mkyong.com/struts2/struts-2-scheckbox-checkbox-example/をご覧ください。Stringboolean

于 2015-11-10T03:39:44.597 に答える
0

チェックボックスの「キー」属性を調べます。それはあなたが必要とするすべてかもしれません。「キー」属性を使用したくない場合は、読み進めてください。

「値」属性を使用して、より良い運を見つけました。私は「fieldValue」について少し混乱しています。「fieldValue」を使用して現在の値を表示できることを見てきましたが、「value」属性がない場合、(フォームで変更した後の) 値はアクション メソッドに送信されません。

于 2014-02-27T19:55:40.927 に答える