我有以下代码,我想为它们渲染radioButtons和标签。由于selectOneRadio和selectItem重新设计了布局,我决定使用纯HTML作为输入radioButtons。
<h:panelGrid columns="6">
<ui:repeat value="#{myBean.list}" var="item">
<input id="#{item.innerList[0].id}" type="radio" name="radioItem" value="#{item.innerList[0].id}" />
<h:outputLabel for="#{item.innerList[0].id}" value="#{item.label}" />
</ui:repeat>
</h:panelGrid>
当尝试使用outputLabel为它们分配标签时,它会在HTML中呈现类似的属性:
j_idt94:0:theidiassigned
包含此代码的标记表单中的prependId标志设置为false,并且在文档中,outputLabel的其他包含标记的属性中没有此标志。
答案 0 :(得分:2)
ui:repeat
组件是NamingContainer。它控制着孩子的client identifier。
for
上的h:outputLabel
属性通常会查找具有匹配组件标识符或客户端标识符的组件。
所以,对于这个标记:
<foo:someNamingContainer id="x">
<h:inputText id="foo" />
<h:outputLabel for="foo" />
</foo:someNamingContainer>
...标签将发出匹配的命名空间标识符<label for="...:x:foo"
。
由于您使用的是直接的XHTML <input>
元素,因此没有匹配的具有匹配ID的JSF组件。
请考虑仅使用XHTML <label>
元素。