Primefaces Ajax Listener调用了两次,即使指定了一次

时间:2015-03-30 09:22:34

标签: ajax jsf-2 primefaces

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

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

我从外面观察了听众: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>

我省略了标签上的大部分属性,以保持简单。

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

1 个答案:

答案 0 :(得分:0)

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

另见