我想用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?
答案 0 :(得分:2)
name
成为HTTP请求参数名称,必须使用它来收集提交的HTTP请求参数值。这默认为JSF组件客户端ID,并且收集在decode()
(或Renderer
本身)的UIComponent
方法中进行。您还需要覆盖/实现decode()
的{{1}}以更改获取请求参数值的方式。