Java 如何让多个组件响应JSF中的单个事件?

Java 如何让多个组件响应JSF中的单个事件?,java,jsf,Java,Jsf,这是座位: 我有一个JSF组件,它基本上是一个“文档”列表 我在同一页上有任意数量的文档查看器组件 这些组件中没有一个相互“了解”。换句话说,它们不能在设计时配置为相互链接或诸如此类 当用户单击文档链接时,我希望通知每个文档查看器组件 基本上,我们的想法是让文档查看器发布这样一个事实,即他们侦听文档列表组件将触发的特定类型的事件(“DocumentSelectedEvent”) 我可以想出一些不特定于JSF的方法,但是我想知道JSF事件模型是否可以处理这类事情 有人有什么想法吗?我认为标准J

这是座位:

  • 我有一个JSF组件,它基本上是一个“文档”列表
  • 我在同一页上有任意数量的文档查看器组件
  • 这些组件中没有一个相互“了解”。换句话说,它们不能在设计时配置为相互链接或诸如此类
当用户单击文档链接时,我希望通知每个文档查看器组件

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

我可以想出一些不特定于JSF的方法,但是我想知道JSF事件模型是否可以处理这类事情


有人有什么想法吗?

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

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

ValueChangeEvent

我不知道您是如何实现文档列表的,但如果是下拉列表或任何其他多项目列表组件,您可以执行值更改事件,并强制提交组件的更改。然后,在页面代码支持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();>

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


您是否试图在不显式提交页面的情况下以“Ajax”的方式进行此操作

因此,当事件发生时,您可以运行一些编写的代码,这些代码可以访问支持bean,该支持bean可以迭代页面上的项(支持bean),并可能对这些项执行操作,对它们启动方法等等。。?因为那可能行得通..啊,阿贾克斯,当时我是。基本上,我们在一个几乎类似门户/portlet的场景中使用JSF作为组件框架做了一个重点研究。因此,我们希望组件“发布”它们使用的事件,并让其他组件透明地生成这些事件,而无需链接组件。这就是你要找的吗?