【问题标题】:How do I have multiple components respond to a single event in JSF?如何让多个组件响应 JSF 中的单个事件?
【发布时间】:2008-11-03 04:21:38
【问题描述】:

坐在这里:

  • 我有一个 JSF 组件,它基本上是一个“文档”列表
  • 我在同一页面上有任意数量的文档查看器组件。
  • 这些组件都不“了解”彼此。换句话说,它们不能在设计时配置为相互链接或类似的东西。

当用户单击文档链接时,我希望每个文档查看器组件都能得到通知。

基本上,这个想法是让文档查看者发布他们侦听文档列表组件将触发的特定类型事件(例如“DocumentSelectedEvent”)的事实。

我可以想到不特定于 JSF 的方法,但我想知道 JSF 事件模型是否可以处理这种事情。

有人有什么想法吗?

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    我认为使用标准 JSF 事件模型没有办法做到这一点。

    有什么方法可以将组件绑定到支持 bean?这样,当事件发生时,您只需浏览组件列表并通知每个组件。

    【讨论】:

    • 因此,当一个事件发生时,您可以运行一些编写的代码,这些代码可以访问支持 bean,该支持 bean 可以遍历页面上的项目(支持 bean)并可能对它们执行操作,在它们上触发方法ETC..?因为这可能会起作用..
    【解决方案2】:

    您只需将组件与支持 bean 绑定并使用 ValueChangeListener 来通知支持 bean。侦听器方法可以更改绑定到相应 UI 组件的其他组件的状态。

    您是否在尝试以“Ajax”方式而不是显式提交页面?

    【讨论】:

    • WRT Ajax,当时我是的。基本上,我们在一个几乎类似于门户/portlet 的场景中使用 JSF 作为组件框架进行了研究。因此,我们希望组件“发布”它们使用的事件,并让其他组件产生这些事件,透明地无需链接组件。
    • blogs.sun.com/rlubke/entry/jsf_2_0_new_feature1 这是您要找的东西吗?
    【解决方案3】:

    值改变事件

    我不知道您是如何实现文档列表的,但如果是下拉列表或任何其他多项目列表组件,您可以执行值更改事件并强制提交组件的更改。然后在页面代码支持 bean 中,您可以调用查看器的方法来加载您喜欢的任何内容。

    在您的 jsf 中,您只需指定您在支持 bean 中编写的值更改处理程序。

       /**
         * Handle document click value change.
         * 
         * @param valueChangedEvent the value changed event
         */
        public void handleDocumentSelect(ValueChangeEvent valueChangedEvent) {
            String selectedDocument = valueChangedEvent.getNewValue();
    
            doDocViewer1DisplayMethod(selectedDocument);
                    doDocViewe2DisplayMethod(selectedDocument);
    
    
        }   
    

    修改您的 jsf 标记以使用您的新值更改事件处理程序并强制提交。

     <f:componentTag 
       attr=xxx 
       attr=xxx 
       valueChangeListener="#{pc_BackingBean.handleDocumentSelect}"
       onChange=submit();>
    

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 2012-05-04
      • 2019-03-18
      • 1970-01-01
      • 2012-05-01
      • 2021-10-02
      相关资源
      最近更新 更多