Надеюсь, название не слишком загадочное...
Проблема в том, что мы генерируем кучу элементов управления вводом (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
, поэтому каждый раз, когда любой элемент управления, сгенерированный циклом, обновляется, все элементы управления повторно визуализируются.
Заранее спасибо, если у кого есть мысли.