Кнопка AJAX JSF не обновляет список выбора простых лиц - PullRequest
3 голосов
/ 18 января 2012

Это код:

<h:form id="articleForm" >
    <p:commandButton value="Select tags" ajax="true" >
        <f:ajax execute="@form" render="@form :articleForm:tags" />
    </p:commandButton>

    <p:pickList id="tags" value="#{articleController.dualListModelForTags}" var="tag" itemLabel="#{tag.tag}" itemValue="#{tag}" converter="distinctTagConverter">
        <f:facet name="sourceCaption">Distinct tags</f:facet>  
        <f:facet name="targetCaption">Connected tags</f:facet>
    </p:pickList>
</h:form>

При нажатии кнопки команды вызывается и выполняется getDualListModelForTags () в компоненте поддержки.В getDualListModelForTags () я делаю некоторые изменения, поэтому я хочу обновить список выбора.Но список выбора (id = tags) не отображается снова.Только когда я обновляю страницу, изменения вносятся в список выбора.

1 Ответ

13 голосов
/ 18 января 2012

Компонент PrimeFaces <p:commandButton> не работает вместе с <f:ajax>. Вместо этого вам нужно использовать собственные ajax-атрибуты кнопки. Вместо <f:ajax execute> вы должны использовать <p:commandButton process>. Но по умолчанию это @form, так что вы можете его опустить. Вместо <f:ajax render> вы должны использовать <p:commandButton update>. Указывать идентификаторы клиентов, которые уже покрыты @form, не нужно, поэтому достаточно просто @form. Кроме того, атрибут ajax="true" не требуется, поскольку он уже используется по умолчанию.

Так что именно так и следует поступить:

<p:commandButton value="Select tags" update="@form" />

Не связанный с конкретной проблемой, вы выполняете бизнес-работу в методе получения. Это плохая идея. Вместо этого сделайте это в методе кнопки action. Вы также, похоже, используете сессионный компонент для просмотра данных в области. Это плохая идея. Вместо этого поместите бин в область видимости.

...