【问题标题】:Inject session scoped bean in every request scoped bean在每个请求范围的 bean 中注入会话范围的 bean
【发布时间】:2013-08-26 02:19:09
【问题描述】:

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

例如,在请求范围的 bean 中代替 this:

@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 检索用户和角色数据。

你怎么看,这里有一些不好的做法吗?

PS:对不起,我不是英语母语者

【问题讨论】:

  • 从前到后。您应该将 bean 注入会话中,并相互注入,而不是相反。您实际上根本不需要会话本身。

标签: session jsf-2 managed-bean


【解决方案1】:

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

不是。它可以完成您想要的工作。只有其他方法是通过ExternalContext#getSessionMap()Application#evaluateExpressionGet() 手动抓取它。但这些方式不是声明性的,因此是一种“不太好的”做法。

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2015-02-23
    • 2011-09-02
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多