2015-08-28 58 views
0

我有一个带有RichFaces 4.5.8的JSF应用程序,CDI bean的deltaspike以及在EAP 6.3中运行的EJB。我有一个包含两个表格和几个popupPanel的页面。该页面由WindowScope中的CDI Bean控制器支持。现在页面变得越来越大,因为popupPanels有很多控件和动作。在windowscope中分离关注的分割CDI bean

xhtml页面被复合组件和ui分开:include的工作正常,但CDI bean变大了。我想将popupPanels的动作方法移动到其他CDI bean中,但对于我来说,在一个页面中放置几个​​windowScoped CDI bean听起来很奇怪。 你会做什么来分割大型CDI bean?

问候

+0

什么是“* windowScoped CDI beans *”? – Tiny

+0

@WindowScoped beans by deltaspike,请参阅https://deltaspike.apache.org/documentation/jsf.html –

+0

这样的分割没有问题。 Window-Scoped只是表示实例仅限于特定的窗口。因此,您可以拥有任何数量的此类实例。您可以将它与“每个窗口的会话”进行比较。因此,只需使用/分割您的逻辑,就像使用会话范围的bean一样。目的不是每页有一个实例或甚至更多的页面。每页创建一个控制器只是许多可能的方法之一。 –

回答

1

@ DarWhi的评论是正确的 - 只要你想,你可以使用尽可能多的WindosScoped豆在您的网页,所有的人都将生活只有一个窗口。没有限制,您必须在JSF页面中只使用单个bean。你只需要使用@Named给所有这样的bean命名。

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

+0

谢谢,我会检查出来。 –