【问题标题】:name attribute overriden when specifying input type="radio" as JSF passthrough element将输入类型 =“radio”指定为 JSF 直通元素时覆盖名称属性
【发布时间】:2015-08-10 09:54:23
【问题描述】:

当使用在 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>

但是,当页面被渲染时,输入的名称属性变为“[some:jsf:id]:fooOption”和“[some:jsf:id]:barOption”,这意味着选中一个不会取消选中另一个!这是一个错误,还是 jsf: 属性命名空间不支持单选按钮?

【问题讨论】:

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


    【解决方案1】:

    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>
    

    只需要重新声明为&lt;f:viewParam name="a-radio" value="#{fooBean.value}"&gt;,或者手动从请求参数映射中抓取提交的值。

    【讨论】:

      【解决方案2】:

      您可以更好地使用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/

      【讨论】:

      • OP 想要自定义默认的单选按钮渲染,这是 &lt;h:selectOneRadio&gt; 无法实现的(默认情况下会生成 HTML &lt;table&gt;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 2017-11-09
      • 2019-04-23
      • 2013-11-05
      • 1970-01-01
      • 2013-04-05
      • 2014-04-30
      相关资源
      最近更新 更多