首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SelectManyCheckbox onHide和remoteCommand

SelectManyCheckbox onHide和remoteCommand
EN

Stack Overflow用户
提问于 2012-10-26 18:58:41
回答 1查看 1.8K关注 0票数 3

我遇到了一个非常有趣的问题。下面是我的场景:

我的目标

  • 使用带有嵌套工具提示的SelectManyCheckbox。
  • 使用SelectManyCheckbox onHide事件触发Ajax (ActionListener)调用,并更新
  • SelectManyCheckbox标签和嵌套工具提示文本。

My Approach

  • 使用remoteCommand并将其绑定到SelectManyCheckbox onHide事件

XHTML

代码语言:javascript
复制
<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>

我的结果

  • Ajax (Action )被触发,SelectManyCheckbox标签和嵌套工具提示被更新(预期的行为)。
  • 在Firebug中,我注意到每个onHide事件Ajax调用都将服务器端请求的数量乘以两个(意外行为)。

例如

代码语言:javascript
复制
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事件就会导致一个大的慢下来。

实验我试过

  • 我创建了一个p:命令按钮,它完成了所需的Ajax调用和正确的元素更新(不需要增加请求)。然后,我通过Firebug窃取它的Ajax JavaScript调用,并将它放在我自己的JavaScript函数中,然后将它用作我的onHide回调。同样,我也经历了同样不想要的结果,标签和工具提示被更新,但是请求开始成倍增加。
  • 我尝试将remoteCommand放置在不同的位置(在菜单之外,在它自己的表单中等等)。这没什么区别。这个问题仍然存在。
  • 我尝试简化SelectManyCheckbox场景(删除工具提示、覆盖、调整各种属性等)以消除其他可能性。没什么区别。
  • 我尝试了一个p:ajax,而不是使用onchange的p:remoteCommand。Ajax请求工作正常,但显然这不是我想要的结果。我需要触发它,onHide。
  • 我没有使用SelectCheckboxMenu,而是尝试使用SelectManyCheckbox (没有标签)进行onchange,并将其他所有内容保持不变。remoteCommand工作正常,Ajax调用只调用一次,一切都很好。/list *我也尝试了PrimeFaces 3.5快照。没什么区别。到目前为止,还没有在论坛或网络上找到任何关于这个问题的线索。这听起来像一个错误或程序员笨拙:滚:?当然,任何见解和/或建议都会受到高度赞赏。
EN

回答 1

Stack Overflow用户

发布于 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单击该链接,您至少可以检查它是否解决了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13092791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档