这是代码:
<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)。只有当我刷新页面时,才会对选项列表进行修改。
答案 0 :(得分:12)
PrimeFaces <p:commandButton>
组件不能与<f:ajax>
一起使用。您需要使用按钮自己的ajax目标属性。您应使用<f:ajax execute>
代替<p:commandButton process>
。但是这已经默认为@form
,因此您可以省略它。您应使用<f:ajax render>
代替<p:commandButton update>
。指定@form
已涵盖的客户端ID是不必要的,因此仅@form
就足够了。此外,ajax="true"
属性是不必要的,因为它已经是默认值。
所以这应该做:
<p:commandButton value="Select tags" update="@form" />
无关,您正在getter方法中执行业务工作。这是一个坏主意。请在按钮的action
方法中执行此操作。您似乎也在使用会话范围的bean来查看作用域数据。这是一个坏主意。将bean放在视图范围内。