这是代码:
<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>
单击命令按钮时,将调用并执行后备bean中的getDualListModelForTags()。在getDualListModelForTags()中,我做了一些修改,所以我希望更新选择列表。但是,选择列表(id = tags)不会再次呈现。仅当我刷新页面时,才会对选择列表进行修改。
PrimeFaces <p:commandButton>组件无法与一起使用<f:ajax>。您需要使用按钮自己的以ajax为目标的属性。而不是<f:ajax execute>您应该使用<p:commandButton process>。但这已默认为@form,因此您可以忽略它。而不是<f:ajax render>您应该使用<p:commandButton update>。指定已经被覆盖的客户机ID @form是不必要的,因此就@form足够了。该ajax="true"属性也是不必要的,因为它已经是默认值。
<p:commandButton>
<f:ajax>
<f:ajax execute>
<p:commandButton process>
@form
<f:ajax render>
<p:commandButton update>
ajax="true"
所以这应该做:
<p:commandButton value="Select tags" update="@form" />
与 具体问题 无关 ,您正在使用getter方法进行业务工作。这是一个坏主意。而是按按钮的action方法进行操作。您似乎也正在使用会话范围的bean来查看范围的数据。这是一个坏主意。而是将bean放入视图范围。
action