将输入类型= "radio"指定为 JSF 直通元素时重写的 name 属性



当使用jsf 2.2中添加的jsf:属性将普通HTML单选按钮绑定到bean时,我遇到了一个问题,生成的单选输入名称不匹配:

<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"one_answers"[some:jsf:id]:barOption",这意味着选中一个不会取消选中另一个!这是一个bug,还是jsf:属性名称空间不支持单选按钮?

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

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

相关内容

  • 没有找到相关文章

最新更新