什么是selectBooleanCheckbox的标签'for'id

ega*_*aga 5 jsf jsf-2

如何引用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>
Run Code Online (Sandbox Code Playgroud)

首先想到的可能性是当然

  for="item#{item.id}"
Run Code Online (Sandbox Code Playgroud)

但由于jsf id是相对的,它不起作用,对吧?

还有一个选项可以使用selectManyCheckbox,但似乎没有提供使用列的选项.

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)