这是代码:
<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执行>你应该使用< p:commandButton process>.但是这已经默认为@form,所以你可以省略它.而不是< f:ajax渲染>你应该使用< p:commandButton update>.指定@form已经涵盖的客户端ID是不必要的,所以只需@form就足够了.此外,ajax =“true”属性是不必要的,因为它已经是默认属性.
所以这应该做:
<p:commandButton value="Select tags" update="@form" />
与具体问题无关,您在getter方法中执行业务工作.这是一个坏主意.而是在按钮的操作方法中执行此操作.您似乎也在使用会话范围的bean来查看作用域数据.这是一个坏主意.将bean放在视图范围中.