Входной идентификатор JSF игнорируется внутри h: dataTable - PullRequest
3 голосов
/ 07 декабря 2010

У меня есть простая таблица данных, которая содержит динамические текстовые поля формы. Каждое поле имеет идентификатор, определенный в компоненте поддержки, поэтому я хотел использовать этот идентификатор для идентификации каждого из полей h: inputText.

<h:dataTable id="fieldTable" value="#{bean.indexFields}" var="item">
  <h:column id="column">
    <h:inputText id="#{item.id}" value="#{bean.values[item.id]}" />
  </h:column>
</h:dataTable>

Когда я пытаюсь просмотреть страницу, JSF выдает ошибку: The id attribute may not be empty.

Если я добавлю константу к атрибуту идентификатора ввода, она будет работать, но, глядя на сгенерированный идентификатор, идентификатор элемента не будет включен:

<h:inputText id="#{item.id}abc" value="#{bean.values[item.id]}" />

Создает следующий вывод:

<table id="form:fieldTable">
  <tbody>
    <tr>
      <td><input id="form:fieldTable:0:abc" type="text" name="form:fieldTable:0:abc" title="" /></td>
    </tr>
    <tr>
      <td><input id="form:fieldTable:1:abc" type="text" name="form:fieldTable:1:abc" title="" /></td>
    </tr>
    <tr>
      <td><input id="form:fieldTable:2:abc" type="text" name="form:fieldTable:2:abc" title="" /></td>
    </tr>
  </tbody>
</table>

Есть ли способ включить идентификатор из повторяющегося элемента в атрибут входного идентификатора? Почему идентификатор опущен?

1 Ответ

1 голос
/ 07 декабря 2010

Почему идентификатор пропущен?

Поскольку в дереве представления только один компонент.Это только его сгенерированный вывод, который повторяется.#{item} недоступен во время построения представления.

Зачем вам нужен другой идентификатор?Просто дайте ему фиксированный идентификатор.JSF позаботится о своей уникальности в сгенерированном выводе HTML.Сгенерированный идентификатор очень предсказуем, и вы можете легко подключиться к нему с помощью JavaScript, если это ваше намерение.

...