h: данные, вложенные в пользовательский интерфейс: повторяется, обновление значений inputText не работает

#jsf-2

#jsf-2

Вопрос:

Я отображаю ArrayList (menu.specifications), содержащий пользовательские объекты (POJO), в нескольких таблицах данных h: на одной странице. Каждый h: DataTable содержит различный диапазон элементов ArrayList. Один столбец содержит тег h: inputText.

После пользовательского ввода и отправки обновляются только теги inputText последнего DataTable. Остальные остаются неизменными.

Вот соответствующий код:

 <h:form>
    <ui:repeat value="#{menu.groupTitles}" var="element" varStatus="loop">
        <h:dataTable rendered="#{menu.points[loop.index].y>0}" value="#{menu.specifications}" 
            first="#{menu.points[loop.index].x}" rows="#{menu.points[loop.index].y}" var="rowVar" border="1">                  
            <h:inputText  value="#{rowVar.pvalue}"  id="pvalue"/>
  

Я тоже пробовал это:

 <h:inputText value="#{menu.specifications[rowVar.index].pvalue}" id="pvalue"/>
  

Объяснение ссылок:

  • menu.points[loop.index].x = первый элемент ArrayList, отображаемый в DataTable
  • menu.points[loop.index].y = количество элементов, которые нужно отобразить в таблице данных
  • menu.groupTitles = заголовки разных таблиц данных

Ответ №1:

Похоже, это проблема из-за того, что все таблицы данных имеют одинаковый идентификатор при создании ui:repeat тега. Смотрите также эту проблему в Mojarra JIRA. Однако у меня пока нет решения. Похоже, что это существует со времен JSF 1.2, потому что проблема впервые возникла при переходе с JBoss 4.2.2 на 4.3.3, который также включал обновление версии JSF 1.2.