如何引用outputLabel中的每个复选框,以便当我单击item的标签时,它实际上与我单击复选框时相同?
<rich:dataGrid value="#{all}" var="item" columns="3">
<h:outputLabel value="#{item.name}" for="what_here?" />
<h:selectBooleanCheckbox value="#{item.selectedForLaterUse}" id="item#{item.id}" />
</rich:dataGrid>
首先想到的可能性当然是
for="item#{item.id}"
但由于jsf id是相对的,它不起作用,对吗?
还有一个选项可以使用selectManyCheckbox,但似乎没有提供使用列的选项。
答案 0 :(得分:8)
你不需要这样做。 JSF为您做到了。只要指定一个固定的ID,只要它在同一范围内即可。
<rich:dataGrid value="#{all}" var="item" columns="3">
<h:outputLabel value="#{item.name}" for="item" />
<h:selectBooleanCheckbox value="#{item.selectedForLaterUse}" id="item" />
</rich:dataGrid>
JSF将相应地生成适当的HTML。在浏览器中打开页面,右键单击并执行查看源以自行查看。生成的HTML元素ID在此特定情况下由所有父NamingContainer
组件和当前项索引组成。
以下是生成输出的示例,假设您为所有NamingContainer
组件提供了固定ID,如<h:form id="form">
和<rich:dataGrid id="grid">
(否则JSF将自动生成ID j_idt1
等等,它也可以很好地工作,但不能立即读取):
<table id="form:grid" class="rf-dg">
<tbody id="form:grid:dgb" class="rf-dg-body">
<tr class="rf-dg-r">
<td class="rf-dg-c">
<label for="form:grid:0:item">one</label>
<input id="form:grid:0:item" type="checkbox" name="form:grid:0:item" />
</td>
<td class="rf-dg-c">
<label for="form:grid:1:item">two</label>
<input id="form:grid:1:item" type="checkbox" name="form:grid:1:item" />
</td>
<td class="rf-dg-c">
<label for="form:grid:2:item">three</label>
<input id="form:grid:2:item" type="checkbox" name="form:grid:2:item" />
</td>
</tr>
</tbody>
</table>