Ререндеринг цикла JSF

Надеюсь, название не слишком загадочное...

Проблема в том, что мы генерируем кучу элементов управления вводом (h:inputOneMenu, h:inputText и т. д.) из некоторого списка Java.

Работает нормально, ЗА ИСКЛЮЧЕНИЕМ требования состоит в том, чтобы эти входные данные проверялись на лету. Опять же, не так сложно, за исключением того, что, поскольку элементы управления были сгенерированы в цикле, единственное возможное действие reRender - это в основном вся форма или a4j:outputPanel вокруг каждой итерации цикла, что в основном одно и то же.

Теперь два приведенных выше решения технически работают, но у них есть неприятный побочный эффект повторного рендеринга всех элементов управления страницы, из-за чего страница кажется действительно дерганой и неуклюжей. Мы хотели бы, чтобы этого не происходило, поэтому в идеале единственным элементом управления, который получает повторную визуализацию, является элемент управления, который отправляет обновление/проверку ajax.

По сути, это код нашей страницы:

<ui:repeat value="#{seam-outjected-list}" var="item">
   <a4j:outputPanel selfRendered="true">
      <h:inputText value=#{item.value}>
         <a4j:support event="onblur" ajaxSingle="true" />
      </h:inputText>
   </a4j:outputPanel>
</ui:repeat>

Я упустил кое-что, что просто отображает разные элементы управления в зависимости от элемента.

Как видите, в настоящее время мы используем решение a4j:outputPanel, поэтому каждый раз, когда любой элемент управления, сгенерированный циклом, обновляется, все элементы управления повторно визуализируются.

Заранее спасибо, если у кого есть мысли.


person Community    schedule 20.07.2009    source источник


Ответы (1)


Моя первая мысль заключается в том, что вам следует попробовать заменить <ui:repeat> на <a4j:repeat> и воспользоваться атрибутом ajaxKeys, чтобы перерендерить только определенные строки.

Из Документы Richfaces:

Основным отличием этого компонента от итерационных компонентов других библиотек является наличие специального атрибута «ajaxKeys». Этот атрибут определяет ключи строк, которые обновляются после запроса Ajax. В результате становится проще обновлять несколько дочерних компонентов по отдельности, не обновляя всю страницу.

person Damo    schedule 21.07.2009