Jsf 使用remoteCommand选择manycheckbox onHide

Jsf 使用remoteCommand选择manycheckbox onHide,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我遇到了一个非常有趣的问题。以下是我的设想: 我的目标 使用带有嵌套工具提示的SelectManyCheckbox 使用SelectManyCheckbox onHide事件触发Ajax(ActionListener)调用 并更新 选择多个复选框标签和嵌套的工具提示文本 我的方法 使用remoteCommand并将其绑定到SelectManyCheckbox onHide事件 XHTML <p:selectCheckboxMenu id="sourceFilter"

我遇到了一个非常有趣的问题。以下是我的设想:

我的目标

  • 使用带有嵌套工具提示的SelectManyCheckbox
  • 使用SelectManyCheckbox onHide事件触发Ajax(ActionListener)调用 并更新
  • 选择多个复选框标签和嵌套的工具提示文本
我的方法

  • 使用remoteCommand并将其绑定到SelectManyCheckbox onHide事件
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>
等等

这显然是不可取的,并导致了一个大的放缓后,刚刚 一对隐藏事件

我尝试过的实验

  • 我创建了一个p:command按钮,它完成了所需的Ajax调用和正确的元素更新(没有成倍的请求) 问题)。然后,我继续通过 Firebug并将其放入我自己的JavaScript函数中,然后 用作我的onHide回调。再一次,我经历了同样的不想要的 结果,标签和工具提示将更新,但请求将开始更改 倍增

  • 我尝试将remoteCommand放置在不同的位置 (在菜单外,在它自己的表单内等)。这并不意味着什么 差别。问题仍然存在

  • 我试图简化SelectManyCheckbox场景(删除 工具提示、变换器、调整各种属性等)以消除其他 可能性。没有区别

  • 我尝试使用onchange使用p:ajax代替p:remoteCommand。 Ajax请求工作得很好,但显然这不是我想要的。 我需要在隐藏时触发它

  • 我尝试使用一个 选择多个复选框(无标签),并保留所有内容 否则也一样。remoteCommand工作正常,Ajax调用 打过一次电话,一切都很好。[list][list]*I 还尝试了PrimeFaces 3.5-SNAPSHOT。没有区别。问题是 仍然表现出来

    到目前为止,还没有在论坛或网络上找到任何关于这方面的线索 这是一个非常重要的问题。这听起来像是bug还是程序员的笨拙 :滚动:?当然,任何见解和/或建议都非常重要 谢谢


我在使用p:remoteCommand时遇到了类似的问题。我不能肯定你的情况的根本原因是一样的,但这可能会有所帮助

在我的例子中,问题是由jquery绑定的多次注册引起的;p:remoteCommand似乎没有使用$(somesource).off(“some\u事件”).on(“some\u事件”,some\u函数)。这意味着——据我所知——如果您更新包含p:remoteCommand的组件,它的操作将在每次更新时反复注册。这反过来意味着,如果调用p:remoteCommand的名称,它将触发与注册次数相同的次数

你说你试着把它移到外面,但还是遇到了同样的问题,所以也许根本不是这个问题。在我的例子中,我使用一个p:commandLink测试了这个假设,并让它调用支持bean。我的目标是确保删除以前对绑定的任何注册,因此通过如上所述注册绑定:


$(somesource).off(“some\u事件”).on(“some\u事件”,some\u函数),让some\u函数单击链接,您至少可以检查它是否解决了问题。

我遇到了这个问题,在一天结束时,我发现这是由于我的应用程序中的widgetVar冲突造成的
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