Атрибут name переопределяется при указании input type="radio" в качестве проходного элемента JSF

При использовании простых радио-кнопок HTML, привязанных к bean-компоненту с использованием атрибутов jsf:, добавленных в JSF 2.2, я сталкиваюсь с проблемой, когда сгенерированные имена радиовходов не совпадают:

<label>
     <input type="radio" value="foo" name="a-radio" jsf:id="fooOption" jsf:value="#{fooBean.value} />
</label>
<label>
     <input type="radio" value="bar" name="a-radio" jsf:id="barOption" jsf:value="#{fooBean.value} />
</label>

Однако, когда страница отрисовывается, атрибуты имени входов становятся "[some:jsf:id]:fooOption" и "[some:jsf:id]:barOption", что означает, что при проверке одного не снимается другой! Это ошибка, или пространство имен атрибута jsf: не поддерживает переключатели?

2 ответа

Решение

Укажите name вместо этого как сквозной атрибут. Это переопределит неявный атрибут.

<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">

<label>
    <input type="radio" value="foo" a:name="a-radio" jsf:id="fooOption" />
</label>
<label>
    <input type="radio" value="bar" a:name="a-radio" jsf:id="barOption" />
</label>

Вам нужно только переопределить его как <f:viewParam name="a-radio" value="#{fooBean.value}">или вручную получить отправленное значение из карты параметров запроса.

Вы можете лучше использовать h:selectOneRadio компонент, который затем содержит серию s:selectItems.

<h:selectOneRadio value="#{fooBean.value}">
    <f:selectItem itemValue="foo" itemLabel="foo" />
    <f:selectItem itemValue="bar" itemLabel="bar" />
</h:selectOneRadio>

Для более полного образца см. http://www.mkyong.com/jsf2/jsf-2-radio-buttons-example/

Другие вопросы по тегам