В чем разница между атрибутом value и itemValue радиокнопки в Jsf?
Разница между значением и значением элемента
Ответы (2)
Значение предназначено для отправки объекта SelectItem, а не String, как itemValue. 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 указывает на SelectItem в управляемом компоненте, а itemValue = отправляемое значение. Если вы решите добавить value="#{TestBean.mySelectItem}", это никак не изменит выводимый HTML, но реализация JSF будет знать, что для этого следует использовать свойство getter для поля mySelectItem.
Изменить: чтобы немного уточнить ответ. Свойство value объекта SelectItem привязывает SelectItem к полю SelectItem в управляемом компоненте через свойства getter и setter. Если вы установите значение следующим образом:
<h:selectOneRadio value="">
<f:selectItem itemValue="TestValue" itemLabel="TestLabel" value="#{TestBean.mySelect}"/>
</h:selectOneRadio>
он вызовет метод getMySelectItem() в TestBean. Как видите, это не имеет ничего общего с 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", значение "1" будет сохранено в переменной TestBean с именем selectedRadioValue.
Из этой статьи IBM Добавление выбора строки в таблицу данных JSF с помощью переключателей:
Идентификатор атрибута предназначен для значения компонента группы переключателей. Он будет привязан к полю Value
Атрибут selectedRowId предназначен для значения элемента переключателя и будет привязан к полю значения элемента.