【问题标题】:Primefaces Ajax Listener called twice, even if specified oncePrimefaces Ajax Listener 调用了两次,即使指定了一次
【发布时间】:2015-06-03 06:03:12
【问题描述】:

我为数据表上的同一个 rowSelect 事件注册了两个 p:ajax 标签。

一个 p:ajax 驻留在复合组件内部,只更新页面中的公共区域,另一个 p:ajax 有一个侦听器,它在复合组件外部注册。

我从外部观察到监听器 p:ajax 被调用了两次。监听器方法怎么只执行一次,因为它只注册在一个 p:ajax 标签上?

<myComp:dataTable  ...>
    <p:ajax event="rowSelect" update=":form:tableDetails" listener="#{backingBean.selectRow}"/>
</myComp:dataTable>

这里是 CC 代码:

<cc:interface >
    <cc:clientBehavior event="rowSelect" name="rowSelect" targets="#{cc.clientId}:dataTable" />
</cc:interface>
<cc:implementation>
    <p:dataTable    id="dataTable" ...>
      <p:ajax event="rowSelect" update=":form:footPanelAndButtons"/>
    </p:dataTable>
</cc:implementation>

为了简单起见,我省略了标签上的大部分属性。

我知道这可能是一个性能问题,因为同一事件会发生两次客户端/服务器通信。

【问题讨论】:

    标签: ajax jsf-2 primefaces


    【解决方案1】:

    它们最终位于同一个数据表上(这就是您通过 &lt;cc:clientBehavior.../&gt; 上的 targets 属性指定它的方式),并且您不必在同一个组件上具有相同的事件(两个 rowSelect)。这只是 PF 组件的限制。通常最后一个执行两次(见下面的链接),但我不知道哪个会在这个结构中。如果方法被调用了两次,你知道...

    另请参阅

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 2017-01-16
      • 1970-01-01
      • 2017-01-19
      相关资源
      最近更新 更多