Как динамически установить идентификатор h: selectBooleanCheckbox? - PullRequest
1 голос
/ 22 сентября 2011

У меня есть

<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 ]

2 голосов
/ 22 сентября 2011

Просто используйте стандартный итеративный компонент 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>

Будет беспокоиться об уникальности идентификаторов.Индекс строки будет добавлен к указанному фиксированному идентификатору следующим образом:

<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}", но это не обязательно.

0 голосов
/ 22 сентября 2011

Франческо,

Вы попробуйте это:

<h:selectBooleanCheckbox id="#{listRow.rowData.name}" value="#{listRow.rowSelected}" disabled="#{detailModel.readOnly}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...