Как перерисовать <ui: repeat> с помощью <f: ajax render>
Я реализовал список, созданный ретранслятором:
<ui:repeat value="#{projectData.paginator.list}" var="project">
<h:outputText value="#{project.title}" />
</ui:repeat>
и кнопку, которая фильтрует мой список:
<h:commandLink action="#{overviewController.filterNew}">
<h:outputText value="Filter List" />
</h:commandLink>
Итак, есть ли простой способ отобразить только мой ретранслятор после нажатия на ссылку команды (с AJAX): -)
Я пробовал следующее:
<f:ajax render="repeater">
ui:repeat id="repeater" value="#{projectData.paginator.list}" var="project">
<h:outputText value="#{project.title}" />
</ui:repeat>
<f:ajax />
<h:commandLink action="#{overviewController.filterNew}">
<h:outputText value="Filter List" />
<f:ajax event="click" render="repeater"/>
</h:commandLink>
но это не сработало.
Update
<h:form>
ui:repeat id="repeater" value="#{projectData.paginator.list}" var="project">
<h:outputText value="#{project.title}" />
</ui:repeat>
<h:commandLink action="#{overviewController.filterNew}">
<h:outputText value="Filter List" />
<f:ajax event="click" render="repeater"/>
</h:commandLink>
</h:form>
тоже не работает... Может быть, мне нужно положить метод action (overviewController.filterNew) в тег ajax?
Обновление 2
<f:ajax event="click" render="repeater">
<h:commandLink action="#{overviewController.filterEBus}">
<h:outputText value="EBusiness" />
</h:commandLink>
</f:ajax>
Не работает тоже!
Возможно, невозможно перезагрузить ретранслятор? есть ли другой элемент, такой как тег div или что-то, что можно перезагрузить???
...
Спасибо за помощь
Ответы
Ответ 1
Сам <ui:repeat>
не генерирует никакого HTML-кода для вывода. <f:ajax render>
ожидает идентификатор, который присутствует в дереве HTML DOM. Поместите его в <h:panelGroup>
с id
и вместо этого ссылайтесь на него.
<h:form>
<h:panelGroup id="projects">
<ui:repeat value="#{projectData.paginator.list}" var="project">
<h:outputText value="#{project.title}" />
</ui:repeat>
</h:panelGroup>
<h:commandLink action="#{overviewController.filterNew}">
<h:outputText value="Filter List" />
<f:ajax execute="@form" render="projects" />
</h:commandLink>
</h:form>
Ответ 2
Да:
Ответ 3
<f:ajax render="repeater">
ui:repeat id="repeater" value="#{projectData.paginator.list}" var="project">
<h:outputText value="#{project.title}" />
</ui:repeat>
<f:ajax />
почему вы завернули его в f: ajax? Это избыточно в этом случае.
Убедитесь, что ваши компоненты окружены тегом <h:form>
<h:form>
<ui:repeat id="repeater" value="#{projectData.paginator.list}" var="project">
<h:outputText value="#{project.title}" />
</ui:repeat>
<h:commandLink action="#{overviewController.filterNew}">
<h:outputText value="Filter List" />
<f:ajax event="click" render="repeater"/>
</h:commandLink>
</h:form>
Ответ 4
Как насчет этого:
<ui:repeat id="repeater" value="#{projectData.paginator.list}" var="project">
<h:outputText value="#{project.title}" />
</ui:repeat>
<h:commandLink>
<h:outputText value="Filter List" />
<f:ajax render="repeater" listener="#{overviewController.filterNew}" />
</h:commandLink>