Session 在每个请求范围的bean中注入会话范围的bean

Session 在每个请求范围的bean中注入会话范围的bean,session,jsf-2,managed-bean,Session,Jsf 2,Managed Bean,为了在会话中保留有关用户的基本信息(安全角色、个人数据等),我创建了一个AppSessionbean,我想知道在每个支持bean中注入该会话bean的引用是否是一种不好的做法 例如,在请求范围的bean中不使用此选项: @ManagedBean @RequestScoped public class MyRequestBean { @ManagedProperty("#{appSession.user}") private User user; @ManagedP

为了在会话中保留有关用户的基本信息(安全角色、个人数据等),我创建了一个AppSessionbean,我想知道在每个支持bean中注入该会话bean的引用是否是一种不好的做法

例如,在请求范围的bean中不使用此选项:

@ManagedBean
@RequestScoped
public class MyRequestBean {
     @ManagedProperty("#{appSession.user}")
     private User user;

     @ManagedProperty("#{appSession.roles}")
     private Roles[] roles;    
}
我想要这样的东西

@ManagedBean
@RequestScoped
public class MyRequestBean {
     @ManagedProperty("#{appSession}")
     private AppSession appSession;
}
…并使用appSession检索用户和角色数据

你怎么看,这里有一些不好的练习吗

对不起,我不是以英语为母语的人

我想知道在每个支持bean中注入会话bean的引用是否是一种不好的做法


不是。它做你想要的工作。唯一的其他方法是通过
ExternalContext#getSessionMap()
应用程序#evaluateExpressionGet()
手动获取它。但这些方法不是声明性的,因此是一种“不太好”的做法。

它是背对背的。您应该将bean注入会话,并相互注入,而不是相反。实际上,您根本不需要直接使用会话本身。