Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Primefaces Ajax侦听器调用了两次,即使指定了一次_Ajax_Jsf 2_Primefaces - Fatal编程技术网

Primefaces Ajax侦听器调用了两次,即使指定了一次

Primefaces Ajax侦听器调用了两次,即使指定了一次,ajax,jsf-2,primefaces,Ajax,Jsf 2,Primefaces,我为datatable上的同一rowSelect事件注册了两个p:ajax标记 一个p:ajax驻留在复合组件中,只更新页面中的公共区域,另一个p:ajax有一个侦听器,它在复合组件外部注册 我观察到监听器从外部被调用了两次p:ajax。侦听器方法如何只能执行一次,因为它只在一个p:ajax标记上注册 <myComp:dataTable ...> <p:ajax event="rowSelect" update=":form:tableDetails" listene

我为datatable上的同一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>
为了保持简单,我省略了标签上的大多数属性


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

它们最终位于同一个数据表上,这是您通过上的targets属性指定它的方式,并且您不必在同一组件上同时选择两个相同的事件。这只是PF组件的一个限制。通常最后一个会执行两次,请参见下面的链接,但我不知道该构造中会出现哪一个。如果该方法被调用两次,您知道

另见