这是坐:
- 我有一个 JSF 组件,它基本上是一个“文档”列表
- 我在同一页面上有任意数量的文档查看器组件。
- 这些组件都不“了解”彼此。换句话说,它们不能在设计时配置为相互链接或类似的东西。
当用户单击文档链接时,我希望通知每个文档查看器组件。
基本上,这个想法是让文档查看者发布他们侦听文档列表组件将触发的某种类型的事件(例如“DocumentSelectedEvent”)的事实。
我可以想到不特定于 JSF 的方法,但我想知道 JSF 事件模型是否可以处理这种事情。
有人有想法么?
我认为没有办法使用标准的 JSF 事件模型来做到这一点。
有什么方法可以将组件绑定到支持 bean?这样,当事件发生时,您只需浏览您的组件列表并通知它们中的每一个。
您只需将组件与支持 bean 绑定并使用 ValueChangeListener 来通知支持 bean。侦听器方法可以更改与各个 UI 组件相关联的其他组件的状态。
您是否尝试以“Ajax”方式执行此操作而无需显式提交页面?
值改变事件
我不知道您是如何实现文档列表的,但如果它是下拉列表或任何其他多项目列表组件,您可以执行值更改事件并强制提交组件的更改。然后在页面代码支持 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();>