Моя страница состоит из нескольких областей, которые создаются путем перебора списка элементов с использованием <ui:repeat>
. Представьте себе этот упрощенный пример:
<h:form id="form">
<ui:repeat id="repeatContainer" var="item" value="#{testBean.items}" varStatus="status">
<h:outputText value="#{item.title}: "/>
<!-- I want to re-render only a single one of these fields -->
<h:outputText id="valueContainer" value="#{item.value}"/><br/>
</ui:repeat>
</h:form>
Теперь я хочу повторно отобразить (только) valueContainer
конкретного элемента в этом списке, используя AJAX (скажем, элемент с индексом 1). Я уже пробовал все эти комбинации без везения:
<!-- Works, but renders all items: -->
<f:ajax render=":form"/>
<!-- This is what I actually want to achieve (does not work, comp. not found): -->
<f:ajax render=":form:repeatContainer:1:valueContainer"/>
<!-- Does not work (component not found): -->
<f:ajax render=":form:repeatContainer"/>
<!-- Does not work (component not found): -->
<f:ajax render=":form:repeatContainer:1"/>
<!-- Does not work (component not found): -->
<f:ajax render=":form:1"/>
<!-- Does not work (component not found): -->
<f:ajax render=":form:1:valueContainer"/>
<!-- Does not work (no error message, but does nothing): -->
<f:ajax render=":form:repeatContainer:valueContainer"/>
Мои требования включают в себя:
- Мне нужно идентифицировать компонент для повторного рендеринга с помощью пути с абсолютным идентификатором, потому что кнопка, запускающая обновление, находится где-то в дереве компонентов совершенно по-другому.
- Повторный рендеринг всей страницы или формы (с использованием
@all
/@form
) для меня бесполезен, потому что это ставит под сомнение, почему я вообще использую JSF/AJAX... - Мне нужно добиться того же самого с ячейками PrimeFaces
<p:dataGrid>
(т.е. обновить только конкретный подкомпонент конкретной ячейки), но я предполагаю, что это сводится к той же проблеме.
Я предполагаю, что должно быть простое решение для этого, которое я в настоящее время не замечаю?!