gpt4 book ai didi

jsf - 在不同的 @Named Bean 中注入(inject)相同的 @SessionScoped Bean

转载 作者:行者123 更新时间:2023-12-03 23:14:54 25 4
gpt4 key购买 nike

我有一个小的 javaee webproject,我需要在其中注入(inject) bean。我有一个启用了 cdi 的 tomee 服务器。这是一个小测试用例。

这是我的@SessionScoped User 对象

import javax.enterprise.context.SessionScoped;
import java.io.Serializable;

@SessionScoped
public class User implements Serializable {
String userName;

public User () {}
public User (String userName) { this.userName = userName; }

public String getUserName() { return userName; }
public void setUserName(String userName) { this.userName = userName; }
}

这是我的两个几乎相同的 bean :
@Named
@RequestScoped
public class BeanOne {
private String message;
@Inject User user;

@PostConstruct
public void init() { user = new User("TestName"); }

public String getMessage() { return user.getUserName(); }
}

在这个 bean 中,我创建了一个新用户。 getMessage 方法返回正确的用户名。我认为用户应该仍然存在于第二个 bean 中,因为它的 @SessionScoped。这是我的第二个 bean 。
@Named
@RequestScoped
public class BeanTwo {
private String message;
@Inject User user;

public String getMessage() { return user.getUserName(); }
}

但是在这个 bean 中,user.getUserName() 返回 null。我应该如何注入(inject) @SessionScoped bean?

最佳答案

发生这种情况是因为您手动初始化了 user BeanOne 中的对象初始化方法。依赖注入(inject)的目的是让一些容器为你创建对象的实例,所以你不应该手动初始化对象。因此,只需为该用户设置一个名称,它将在所有其他 bean 的 session 期间可见。

@PostConstruct
public void init() { user.setUserName("TestName"); }

关于jsf - 在不同的 @Named Bean 中注入(inject)相同的 @SessionScoped Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853953/

25 4 0