指定输入类型=" radio"作为JSF passthrough元素

时间:2015-08-10 09:54:23

标签: jsf radio-button jsf-2.2 passthrough-elements

当使用JSF 2.2中添加的jsf:属性绑定到bean的纯HTML单选按钮时,我遇到了生成的无线电输入名称不匹配的问题:

<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>

但是,当呈现页面时,输入的名称属性变为&#34; [some:jsf:id]:fooOption&#34;和#34; [some:jsf:id]:barOption&#34;,这意味着检查一个人不会取消选中另一个!这是一个错误,还是jsf:attribute命名空间不支持单选按钮?

2 个答案:

答案 0 :(得分:4)

name指定为passthrough attribute。它将覆盖隐式属性。

<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}">,或手动从请求参数映射中获取提交的值。

答案 1 :(得分:0)

您可以更好地使用h:selectOneRadio组件,然后该组件包含一系列s:selectItem个。

<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/