我尝试了很长时间才能达到resource injection,但未能成功。

我使用JSF 2.2JDK 1.7.,我的想法是eclipse luna

我有一个称为UserBean的会话范围的bean和一个称为SettingsBean的视图范围的bean。

我在faces-config.xml UserBean中将它们设置为session scoped,在SettingsBean中将其设置为view scoped,其bean名称分别为“ settingsBean”和“ userBean

public class SettingsBean implements Serializable {
    private static final long serialVersionUID = 1L;

    @Inject  // I also tried @ManagedProperty but didn't work
    private UserBean userBean;

    @PostConstruct
    public void init(){
        System.out.println(userBean.getUser().getFullName());
    }

   public UserBean getUserBean() {
        return userBean;
    }

    public void setUserBean(UserBean userBean) {
        this.userBean = userBean;
    }

}


问题是我将userBean设置为null。这里有什么问题?
感谢帮助。

最佳答案

我在faces-config.xml中删除了ManagedBeanViewScopedsettingsBean定义,并将它们手动添加到SettingsBean.java文件中。

并添加以下内容:

@ManagedProperty(value="#{userBean}")
    private UserBean userBean;


所以最后,它起作用了:

    @ManagedBean
    @ViewScoped
    public class SettingsBean implements Serializable{

        private static final long serialVersionUID = 1L;

        @ManagedProperty(value="#{userBean}")
        private UserBean userBean;
        //...
 @PostConstruct
    public void init(){
        System.out.println(userBean.getUser().getFullName());
    }
    public UserBean getUserBean() {
            return userBean;
        }

        public void setUserBean(UserBean userBean) {
            this.userBean = userBean;
        }
}

10-04 14:10