Я строю стол, используятег, а его длина является динамической.Каждый ряд имеетполе.Когда форма отправляется, она устанавливает значения из формы в хэш-карту.Это все прекрасно работает, за исключением проверки.Мне нужно сказатьк какому входу он относится, используя атрибут for.Я попытался создать уникальный идентификатор для каждой строки на основе имени элемента, используемого для создания строки.Нотег остается пустым, когда я отправляю неверный ввод, и я получаю следующий вывод в журнале сервера (JBoss 7.1):
[javax.enterprise.resource.webcontainer.jsf.renderkit]
Unable to find component with ID nTAS in view.
Вот XHTML:
<ui:repeat var="item" ...>
...
<h:inputText value="#{bean.chosenItems[item.name]}" id="n#{item.name}" >
<f:validateLongRange minimum="0" maximum="10" />
</h:inputText>
<h:message for="n#{item.name}" />
...
</ui:repeat>
В порядкепо крайней мере, чтобы получить какое-то сообщение об ошибке в браузере, я также добавил это в верхней части моей страницы, и оно работает:
<h:messages styleClass="error" />
Отображается это сообщение:
j_idt13:j_idt17:1:n: Validation Error: Value is not of the correct type.
И этот тип показывает часть проблемы, поскольку идентификатор - это тот странный код в начале сообщения, и он начинается с «n», но не содержит имени элемента.Если я посмотрю на источник в браузере, то на самом деле это идентификатор: id="j_idt13:j_idt17:1:nTAS"
Если я посмотрю на другие компоненты, кроме таблицы, у них также есть загадочные идентификаторы, которые, очевидно, сгенерированы JSF.
И что действительно странно, так это то, что, когда я вводлю «asdf» во второй раз и повторно отправляю форму, он затем вызывает метод действия для bean-компонента, вместо того, чтобы снова давать сбой во время фазы проверки !!Как это может быть?!
Спасибо за любые подсказки, Джон