如何动态设置h:selectBooleanCheckbox的id?

时间:2011-09-22 11:47:54

标签: java jsf-2

我有

<wai:collectionIter value="#{listModel.listRows}" valueVar="listRow" odd="odd" even="even" styleVar="rowStyle">
  <tr class="#{rowStyle}">
    <td>
      <h:selectBooleanCheckbox value="#{listRow.rowSelected}" disabled="#{detailModel.readOnly}">
        <c:set target="#{component}" property="id" value="#{listRow.rowData.name}"/>
      </h:selectBooleanCheckbox>
    </td>
    <ui:insert name="columnData"/>
  </tr>
</wai:collectionIter>

(其中wai:collectionIter是自定义标签)

但相应的html代码看起来像

<td>
  <c:set target="javax.faces.component.html.HtmlSelectBooleanCheckbox@10cd160" property="id" value="BusinessUnitNumber"></c:set><input type="checkbox" name="searchForm:j_idt100" /
</td>

我必须说c:set target =“#{component}”来自我在别处找到的一个例子......

由于我不是JSF专家,并且假设它是正确的,我希望得到的html是这样的:

<td>
  <input id="BusinessUnitNumber" type="checkbox" name="BusinessUnitNumber"
</td>

是完全错误还是我错过了其他什么?

感谢您的帮助。

弗朗西斯

2 个答案:

答案 0 :(得分:2)

只使用标准的JSF迭代组件而不是模糊的自定义标记。例如。 <ui:repeat>

<ui:repeat value="#{listModel.listRows}" var="listRow" varStatus="loop">
    <tr class="#{loop.even ? 'even' : 'odd'}">
        <td>
            <h:selectBooleanCheckbox 
                id="foo" 
                value="#{listRow.rowSelected}" 
                disabled="#{detailModel.readOnly}" />
        </td>
        <ui:insert name="columnData"/>
    </tr>
</ui:repeat>

它会担心ID的唯一性。它将行索引添加到给定的固定ID,如下所示:

<tr class="odd"><td><input type="checkbox" name="formid:repeatid:0:foo" id="formid:repeatid:0:foo" /></td></tr>
<tr class="even"><td><input type="checkbox" name="formid:repeatid:1:foo" id="formid:repeatid:1:foo" /></td></tr>
<tr class="odd"><td><input type="checkbox" name="formid:repeatid:2:foo" id="formid:repeatid:2:foo" /></td></tr>

可以通过id="#{listRow.rowData.name}"使其动态化,但这不是必需的。

答案 1 :(得分:0)

弗朗西斯

你试试这个:

<h:selectBooleanCheckbox id="#{listRow.rowData.name}" value="#{listRow.rowSelected}" disabled="#{detailModel.readOnly}" />