我在数据表上为同一个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>
我省略了标签上的大部分属性,以保持简单。
我知道这可能是一个性能问题,因为同一事件发生了两次客户端/服务器通信。
答案 0 :(得分:0)
它们最终会出现在同一个数据表中(这就是您通过targets
上的<cc:clientBehavior.../>
属性指定它的方式),并且您不必在同一个组件上使用相同的事件(都是rowSelect)。这只是PF组件的限制。通常最后一个执行两次(见下面的链接),但我不知道这个构造中将是哪一个。如果方法被调用两次,你知道......
另见