为什么h:selectOneRadio没有“name”属性?

时间:2012-07-10 03:33:16

标签: jsf jsf-2 custom-component

我想用SelectOneRadio做一些疯狂的分组,所以我决定创建自己的自定义组件,允许我指定name标签的<input>属性(如您所知,同样{{ 1}}表示单选按钮位于同一组中)。渲染器是正确的,所以我有name用于渲染这样的

<input>

现在像这样呈现

<input name="myForm:test1" id="myForm:test1:0" value="0" type="radio">

但是,EL在提交表单时停止工作(对于h:commandButton和p:commandButton也是如此)。所以,如果我有这个

<input name="foo" id="myForm:test1:0" value="0" type="radio">

然后EL工作,<xxx:selectOneRadio id="test1" value="#{myBean.selectedFood}"> 打印出更正的值,但是如果我放入

selectedFood

将在<xxx:selectOneRadio id="test1" value="#{myBean.selectedFood}" groupId="foo"> 标记中生成name=foo。然后EL绑定停止工作。 <input>selectedFood

更有趣的是,如果我加入这个

null

哪个<xxx:selectOneRadio id="test1" value="#{myBean.selectedFood}" groupId="myForm:test1"> 是正确的客户端ID,然后EL绑定再次工作,所以它看起来不像是我的代码使绑定停止工作。 JSF是否需要将myForm:test1标记的name属性设置为客户端ID?

1 个答案:

答案 0 :(得分:2)

name成为HTTP请求参数名称,必须使用它来收集提交的HTTP请求参数值。这默认为JSF组件客户端ID,并且收集在decode()(或Renderer本身)的UIComponent方法中进行。您还需要覆盖/实现decode()的{​​{1}}以更改获取请求参数值的方式。