Как перерендерить ‹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>

но это не сработало..


Обновлять

<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>

тоже не работает ... Может быть, мне нужно поместить метод действия (overviewController.filterNew) в тег ajax?


Обновление 2

    <f:ajax event="click" render="repeater">
    <h:commandLink action="#{overviewController.filterEBus}">
    <h:outputText value="EBusiness" />
    </h:commandLink>
    </f:ajax>

Тоже не работает!


Может быть, ретранслятор нельзя перерендерить? есть ли другой элемент, например, тег div или что-то, что можно перерисовать???

...

Спасибо за помощь


person Sven    schedule 23.08.2010    source источник
comment
Может быть, мне нужно поместить метод действия (overviewController.filterNew) в тег ajax? - попробовать, почему бы и нет?   -  person Dejell    schedule 24.08.2010
comment
Тоже не работает! Если никто не видит ошибку, возможно, это ошибка jsf/ajax?   -  person Sven    schedule 24.08.2010


Ответы (4)


Сам <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>
person BalusC    schedule 24.08.2010
comment
Но мне кажется, что это не работает в случае исключения проверки. В этом случае мои данные теряются. - person Ralph; 17.04.2018

Да:

person Bozho    schedule 23.08.2010

<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>
person Dejell    schedule 23.08.2010
comment
Это я тоже пробовал. И я окружил всю часть тегами h:form :-( Просто ничего не умирает -.- - person Sven; 24.08.2010

Как насчет этого:

<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>
person amorfis    schedule 24.08.2010
comment
ui:repeat не поддерживает атрибут id. Что имеет смысл, поскольку он ничего не представляет, это просто тег управления потоком. - person BalusC; 24.08.2010
comment
Итак, ему нужно обернуть его в ‹h:panelGroup› - person amorfis; 24.08.2010