【问题标题】:Richfaces pickList ajax event when item has been added/removed添加/删除项目时的 Richfaces pickList ajax 事件
【发布时间】:2013-06-10 14:49:33
【问题描述】:

当项目被添加到 Richfaces (4.3.1.Final) pickList 时,是否会触发 ajax 事件?我需要根据是否选择了任何项目来启用禁用按钮。

开发者指南根本没有提到这一点,但我在谷歌搜索时找到了this。使用建议的解决方案,我使用了以下 ajax 事件:

<rich:pickList 
        var="item"
        value="#{someBean.selectedItems}">
    <a4j:ajax event="sourceblur" render="somePanelGroupWithTheButton" />
    <a4j:ajax event="targetblur" render="somePanelGroupWithTheButton" />
</rich:pickList>

这行得通。但是,每次源或目标列表模糊时都会触发该事件,这对我的需要来说太频繁了。

我也试过&lt;a4j:ajax event="additems" /&gt;&lt;a4j:ajax event="removeitems" /&gt;。在这种情况下,该事件仅在删除或添加项目时触发,就像我想要的那样。但是,selectedItems 直到事件被触发后才会填充新项目。这意味着我不能使用它来重新渲染按钮,因为在添加第一个项目后列表将为空,而在添加第二个元素后大小为一个。

在目标列表 (selectedItems) 更新后是否有一个 ajax 事件可以监听? (而且在某处必须有该组件支持的 ajax 事件的完整列表,对吧?

我也按照here 的建议尝试了更改事件,但它没有被触发。

【问题讨论】:

  • 你可以试试股票 JSF 事件,也许是 &lt;f:event type="postValidate"/&gt;
  • 供将来参考,支持的事件列表在official docs
  • 谢谢,添加到我的答案中。不过,他们确实应该在可下载的 pdf 中包含此类内容。

标签: java ajax jsf jsf-2 richfaces


【解决方案1】:

刚刚再次尝试更改事件,突然它起作用了。可能是我第一次尝试时的错字。这是要走的路:

<rich:pickList 
        var="item"
        value="#{someBean.selectedItems}">
    <a4j:ajax event="change" render="somePanelGroupWithTheButton" />
</rich:pickList>

当触发事件并重新渲染somePanelGroupWithTheButton 时,someBean.selectedItems 已填充正确的项目。

这是在 4.3.0.M2 中解决的缺陷:https://issues.jboss.org/browse/RF-12360

pickList 支持的事件可以在这里找到:http://docs.jboss.org/richfaces/4.3.X/4.3.0.CR1/vdldoc/rich/pickList.html

【讨论】:

    【解决方案2】:

    试试这个:

    <rich:pickList 
            var="item"
            value="#{someBean.selectedItems}">
        <a4j:ajax event="transfer" render="somePanelGroupWithTheButton" />
    </rich:pickList>
    

    【讨论】:

    • 请不要提供纯代码答案。更详细地解释发生了什么,以及为什么你的答案可以解决问题。
    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多