在窗口作用域中拆分CDI bean以分离关注点



我有一个JSF应用程序,其中包含RichFaces 4.5.8、用于CDI bean的deltaspike和在EAP 6.3中运行的ejb。我有一个页面与两个表和几个popupPanels。该页面由WindowScope中的CDI bean控制器支持。现在页面变得越来越大,因为popupPanels有很多控件和动作。

xhtml页面由复合组件和ui:include分隔,这工作得很好,但是CDI bean变得越来越大。我想将popupPanels的操作方法移动到其他CDI bean中,但对我来说,在一个页面中有几个windowScoped CDI bean听起来很奇怪。你会做什么来分割大的CDI bean?

@DarWhi的评论是正确的-你可以在你的页面中使用尽可能多的windowscoped bean,因为你想要的,他们都将只生活在一个窗口。没有限制您必须在JSF页面中只使用单个bean。您只需要使用@Named为所有这些bean指定一个名称。

如果您希望每个窗口只有一个WindowScoped bean,那么您仍然可以将逻辑分离为多个bean。只需将所有子bean注入到WindowScoped bean中,然后使用点符号引用子bean中的操作:#{viewScopedBean.childBean.action。您可以使用变量来存储对childBeans的引用,并使JSF中的代码更短,请参阅此答案。

最新更新