Jsfのラジオボタンの値とitemValue属性の違いは何ですか?
2 に答える
値は、itemValue のような文字列ではなく、SelectItem オブジェクトで送信することを意図しています。itemValue は要求パラメーターとしてサーバーに渡される項目の値ですが、値は SelectItem インスタンスを指す値バインディング式です。
この JSF を見ると、次のようになります。
<h:selectOneRadio value="">
<f:selectItem itemValue="TestValue" itemLabel="TestLabel" />
</h:selectOneRadio>
これは次の HTML に変わります。
<table>
<tr>
<td>
<input type="radio" name="j_id_id9" id="j_id_id9:0" value="TestValue" />
<label for="j_id_id9:0"> TestLabel</label>
</td>
</tr>
</table>
したがって、value = valueBinding はマネージド Bean の SelectItem を指し、itemValue = 送信される値です。value="#{TestBean.mySelectItem}" を追加することにした場合、出力される HTML はまったく変更されませんが、JSF 実装は mySelectItem フィールドの getter プロパティをこれに使用する必要があることを認識します。
編集:答えをもう少し明確にするために。SelectItem の value プロパティは、getter および setter プロパティを介して SelectItem をマネージド Bean の SelectItem フィールドにバインドします。次のように値を設定した場合:
<h:selectOneRadio value="">
<f:selectItem itemValue="TestValue" itemLabel="TestLabel" value="#{TestBean.mySelect}"/>
</h:selectOneRadio>
TestBean で getMySelectItem() メソッドを呼び出します。ご覧のとおり、itemValue はユーザーがフォームを送信したときにリクエストに含まれる値を設定する責任があるため、これは itemValue とは関係ありません。次に、itemValue が h:selectOneRadio の値に格納されます。うまくいけば、次のように String フィールドにバインドされます。
<h:selectOneRadio value="#{TestBean.selectedRadioValue}">
<f:selectItem itemValue="1" itemLabel="1. radio one" />
<f:selectItem itemValue="2" itemLabel="2. radio two" />
</h:selectOneRadio>
ここで、ユーザーが次のように見えるラジオをチェックすると、「1. radio one」という値が、selectedRadioValue という名前の TestBean の変数に格納されます。
このIBMの記事から、ラジオボタンを使用して行選択をJSFデータテーブルに追加します。
属性 idは、ラジオ ボタン グループのコンポーネント値です。値フィールドにバインドされます
selectedRowId 属性は、ラジオ ボタンのアイテム値用であり、アイテム値フィールドにバインドされます。