【问题标题】:@Inject is injecting a new instance every time i use it@Inject 每次我使用它时都会注入一个新实例
【发布时间】:2012-03-07 23:27:18
【问题描述】:

我有以下问题。 (jboss 7.1 as、jsf 2 和 myFaces 扩展过滤器)

两个托管 bean。 (我已经清理了代码)。我想从 NextBean 中检索 LoginBean。问题是每次注入 bean 时,我都会得到一个 LoginBean 的新实例,而不是当前实例。我尝试过@Named("name") 之类的方法。从jsf页面调用bean本身(两者)并设置所有数据,但是每次都会注入一个新实例,我无法弄清楚我做错了什么!!!

@Named
@SessionScoped
public class LoginBean implements Serializable {

    private static final long serialVersionUID = -8825740128333470396L;

    @EJB private UserDetailDao userDetailDao;

    private String description;
    public String getDscription() { return description; }

    public String submit() {
        userDetailDao.doSomething("test");

        description = "testing";

        return "next.xhtml";
    }
}

第二个豆子

@Named
@SessionScoped
public class NextBean extends SomeBean implements Serializable {

    private static final long serialVersionUID = -4654827059950265300L;

    @Inject private LoginBean loginBean;

    public String submit() {
        String description = loginBean.getDscription();

        return "login.xhtml";
    }
}

“描述”已设置,我可以在 jsf 页面中看到它,但我无法从 NextBean 访问它,因为它每次都会注入一个新实例!但是数据在会话中!

:/

有什么建议吗? 提前致谢!

【问题讨论】:

  • 确定是同一个会话吗?
  • 没有创建一个新的。以上两个是创建的,如果我有一个@PostConstruct,那么它会被初始化一次,并且我在上面的 bean 中插入的值包含在各自的 jsf 视图中:/
  • 您是否导入了正确的 (CDI) SessionScoped 类:javax.enterprise.context.SessionScoped
  • @Matt:根据我已删除答案的评论,是的。
  • @BaluC 感谢您之前的回答!我 100% 确定我导入了正确的 CDI 类!但是我不确定其他豆子是否有正确的豆子!我会回家,如果是这样的话,如果它导致了这个问题!除此之外,我不知道:/过去两天我正在尝试修复它!

标签: java jsf cdi


【解决方案1】:

我把豆子命名错了!并且没有使用正确的@Produces :/

感谢您的宝贵时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2018-10-08
    相关资源
    最近更新 更多