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

时间:2008-11-03 04:21:38

标签: java jsf

这是坐下来:

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

当用户点击文档链接时,我希望通知每个文档查看器组件。

基本上,我们的想法是让文档查看者发布他们监听文档列表组件将触发的某种类型事件(“DocumentSelectedEvent”)的事实。

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

有人有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我认为有一种方法可以使用标准的JSF事件模型。

有没有办法可以将组件绑定到辅助bean?这样,当事件发生时,您可以浏览组件列表并通知每个组件。

答案 1 :(得分:1)

您需要将组件与支持bean绑定,并使用ValueChangeListener通知支持bean。监听器方法可以改变与各个UI组件相关联的其他组件的状态。

您是否尝试以“Ajax”方式执行此操作而不明确提交页面?

答案 2 :(得分:0)

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();>