关于p:PrimeFaces的ajax。我的<p:commandButton>
中有两个p:ajax请求。我在第二种方法中做了stdout
,以便我可以看到它是否被触发。相同(最后)的方法被触发两次,我不知道为什么。如果我只将一个<p:ajax>
请求放入我的按钮,则会触发一次,如果我发出两个<p:ajax>
请求,则会触发两次。
<h:body style="background:#f5f5f5;">
<h:form id="formG">
<p:commandButton styleClass="viewButton" icon="ui-icon-search"
value="#{msg['button.open']}" id="auftragButtonG">
<p:ajax listener="#{auftragBean.saveIdIntoAppScope()}" partialSubmit="true"/>
<p:ajax listener="#{auftragBean.loadXMLData()}" partialSubmit="true"/>
</p:commandButton>
</h:form>
</h:body>
public void loadXMLData(){
setXmlData(entireXmlData(mandantId(), getJobId()));
System.out.println(getXmlData().size());
}
有人知道为什么以及如何忽略第二次加载?
答案 0 :(得分:3)
这是因为您指示组件在同一(默认)事件上触发两个ajax请求。一个<p:ajax>
计为一个请求。换句话说,代码的行为与您编程的完全相同。
您需要以不同方式解决您的具体问题。
调用一个方法,然后委托给所需的方法。
<p:commandButton ... action="#{bean.methodWhichInvokesBothMethods()}" partialSubmit="true" />
在一次调用中调用多个方法。您可以使用<f:actionListener binding>
技巧。
<p:commandButton ... partialSubmit="true">
<f:actionListener binding="#{bean.method1()}" />
<f:actionListener binding="#{bean.method2()}" />
</p:commandButton>
无论哪种方式,<p:ajax>
完全没必要,因为<p:commandButton>
本身已经内置了ajax支持。