【问题标题】:p:ajax fires twicep:ajax 触发两次
【发布时间】:2015-09-28 10:57:12
【问题描述】:

关于 PrimeFaces 的 p: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());
}

有人知道我为什么以及如何忽略第二次加载吗?

【问题讨论】:

    标签: ajax jsf primefaces


    【解决方案1】:

    这是因为您指示组件在同一个(默认)事件上触发两个 ajax 请求。一个&lt;p:ajax&gt; 算作一个请求。换句话说,代码的行为与您编写的完全一样。

    您需要以不同的方式解决具体问题。

    1. 调用一个方法,该方法又委托给所需的方法。

      <p:commandButton ... action="#{bean.methodWhichInvokesBothMethods()}" partialSubmit="true" />
      
    2. 在一次调用中调用多个方法。您可以为此使用&lt;f:actionListener binding&gt; 技巧。

      <p:commandButton ... partialSubmit="true">
          <f:actionListener binding="#{bean.method1()}" />
          <f:actionListener binding="#{bean.method2()}" />
      </p:commandButton>
      

    不管怎样,&lt;p:ajax&gt; 是完全没有必要的,因为 &lt;p:commandButton&gt; 本身已经内置了 ajax 支持。

    另见:

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2014-07-08
      • 1970-01-01
      • 2012-05-06
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多