0

正如这里所讨论的,在从 servlet 重定向的 jsp 中显示用户名以获取有状态会话 Bean 的相同实例,我必须将其保存在相关的 HttpSession 中。它工作得很好,但是在一个 servlet 中我这样做了:

SessionCart cart = (SessionCart) request.getSession().getAttribute("cart");
if (cart==null){
   cart = new SessionCart();}

属性“购物车”是我保存初始化购物车的地方。问题是,如果之前未初始化购物车,则行 cart=new SessionCart(); 初始化一个与Context无关的bean,所以@PercistenceContext得到的entitymanager为null。我尝试使用注释

@EJB
private SessionCart cart;

但是这个无论如何都会创建一个新的会话购物车,而不受我的控制(因此,如果我有一个与用户相关的购物车,我会创建一个新的并将其丢弃......这不太好)。我的问题是:我是否可以在不使用注释 @EJB 并将其与上下文相关的情况下创建一个新的有状态会话 Bean?所以我可以控制何时创建它

4

1 回答 1

0

如果我猜对了,你想初始化你的 bean 懒惰。

要在运行时控制/创建 bean,您可以使用Instance<Bean> Java EE API

在您的情况下,它看起来像这样:

@Inject
private Instance<SessionCart> sessionCartInstance;

if (cart == null) {
    cart = sessionCartInstance.get();
}
于 2015-02-04T23:38:07.740 回答