我遇到了一个非常有趣的问题。下面是我的场景:
我的目标
My Approach
XHTML
<p:selectCheckboxMenu id="sourceFilter"
onHide="sourceFilterCommand();"
value="#{viewRevenueBean.sourceSelectManyMenu.selectedValues}"
label="#{viewRevenueBean.sourceSelectManyMenu.label}"
filter="true" filterMatchMode="contains"
validator="#{viewRevenueBean.sourceSelectManyMenu.validate}"
widgetVar="srcFilterDropDown">
<f:selectItems id="sourceItems"
value="#{viewRevenueBean.sourceSelectManyMenu.availableItems}"
var="source" itemLabel="#{source.label}" itemValue="#{source.value}" />
<f:convertNumber type="number" />
<p:tooltip id="srcToolTip"
for="sourceFilter"
value="#{viewRevenueBean.sourceSelectManyMenu.tooltipText}"
showEffect="fade"
hideEffect="fade"/>
<p:remoteCommand name="sourceFilterCommand" update="sourceFilter"
actionListener=#{viewRevenueBean.sourceSelectManyMenu.defaultEventHandler}"/>
</p:selectCheckboxMenu>我的结果
例如
1st onHide event = 1 Request
2nd onHide event = 2 Requests
3rd onHide event = 4 Requests
4th onHide event = 8 Requests
5th onHide event = 16 Requests等等..。
这显然是不想要的,只需要几个onHide事件就会导致一个大的慢下来。
实验我试过
发布于 2013-01-22 13:33:57
在使用p:remoteCommand时,我遇到了类似的问题。我不能肯定的说,在你的情况下,根本原因是相同的,但也许这可以在某种程度上有所帮助。
在我的例子中,这个问题是由大量注册jquery绑定引起的;p:remoteCommand似乎不使用$(somesource).off("some_event").on("some_event",some_function)。这意味着--据我所知--如果您更新包含p:remoteCommand的组件,它的操作将一次又一次地注册,每次更新。这反过来意味着,如果您调用p:remoteCommand的名称,它将触发与注册相同的次数。
你说你试着把它移到外面,但仍然有同样的问题,所以也许这毕竟不是这个问题。在我的例子中,我使用p:commandLink来测试这个假设,并让它调用backing。我的目标是确保以前任何绑定注册都被删除,因此通过注册绑定(如上面提到的):
( $(somesource).off("some_event").on("some_event",some_function),并让some_function单击该链接,您至少可以检查它是否解决了问题。
https://stackoverflow.com/questions/13092791
复制相似问题