2010-12-07 3 views
3

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

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

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

<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

Why is the ID omitted?

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

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

+0

Это хороший момент - я не обязательно забочусь об ID. Я столкнулся с этим, потому что я использовал композицию ui: для создания составного элемента управления, содержащего метку, а затем текстовое поле ввода. Идентификатор, указанный в составном элементе управления, использовался как для метки, так и для поля ввода ("# {id} Label" и "# {id}" соответственно). – Travis 2010-12-07 16:16:10

Смежные вопросы