【发布时间】:2018-01-20 23:59:24
【问题描述】:
我有这个复合组件,它工作得很好。
<cc:interface>
<cc:attribute name="listenerController" ... />
</cc:interface>
<cc:implementation>
<p:outputPanel id="selectOnePanel">
<p:selectOneMenu id="selectOne" ... >
<f:selectItems ... />
<p:ajax event="change" listener="#{listenerController.listenerMethod()}" ... />
</p:selectOneMenu>
</p:outputPanel>
</cc:implementation>
但我想从这个组件外部收听“更改”事件。所以我在 cc:interface 中使用了“cc:clientBehavior”。出于测试目的,我添加了几个“console.out”。
首先我更新了复合组件:
<cc:interface>
<cc:attribute name="listenerController" ... />
<cc::clientBehavior name="change" targets="#{cc.clientId}":selectOne" event="change" />
</cc:interface>
<cc:implementation>
<p:outputPanel id="selectOnePanel">
<p:selectOneMenu id="selectOne" ... >
<f:selectItems ... />
<p:ajax event="change" listener="#{listenerController.listenerMethod()}
onstart="console.log(1);" oncomplete="console.log(2); ... />
</p:selectOneMenu>
</p:outputPanel>
</cc:implementation>
以及我将如何使用它:
<xx:compostiteComponentName>
<p:ajax event="change" onstart="console.log(3)"; oncomplete="console.log(4);" />
</xx:compostiteComponentName>
问题是复合组件中的监听器停止工作。所有的“onstart”和“oncomplete”似乎都可以工作,因为控制台输出是:
1
2
3
4
为什么监听器停止工作?
【问题讨论】:
-
如果这适用于普通的非primefaces jsf对应物(所以
h:selectOneMenu和f:ajax)。这样你就可以缩小范围,如果它是 PrimeFaces 相关的或普通的 jsf)
标签: ajax jsf primefaces composite-component