如何在SesionScoped bean中使用ViewScoped bean?

Tah*_*idi 2 jsf dependency-injection session-scope jsf-2 view-scope

我有三个托管bean:一个作用域范围(S)和两个视图作用域(A,B).我想在S和B中使用A的功能,但问题是在会话范围内注入视图范围的bean是不可能的.

The scope of the object referenced by expression #{a}, view, is shorter than the referring managed beans (s) scope of session
Run Code Online (Sandbox Code Playgroud)

我不想复制A的功能.任何的想法?

Bal*_*usC 5

这只是表明模型中存在设计问题.这表明,图范围的bean类A是具有"太多"代码逻辑和它的代码应当被重构到这反过来又可以通过两者的会话可以使用不同的,可重用的类范围的bean类S和视图作用域bean类A. 法德米特等.也许它代表了实际需要在EJB中的业务服务代码?

在任何情况下,您都可以通过将视图作用域bean A作为会话作用域bean的操作方法的方法参数实现该要求.

<h:commandXxx ... action="#{sessionScopedBean.doSomething(viewScopedBean)}" />
Run Code Online (Sandbox Code Playgroud)

但这也是一种设计气味.您需要确保为bean保存的数据/状态选择正确的范围.另请参见如何选择正确的bean范围?