2014-11-01 35 views
3

我試圖實現resource injection很長一段時間,但無法成功。我使用JSF 2.2JDK 1.7.而我的ide是eclipse luna資源注入問題JSF 2.2

我有一個會話範圍的bean,名爲UserBean,視圖範圍的bean叫SettingsBean

我將它們設置在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爲空。這裏有什麼問題? 感謝您的幫助。

+0

節目的UserBean,也是這兩個類的進口。 – pamps 2014-11-01 12:39:05

+0

取決於一些事情。首先,您需要確保所有註釋都是對齊的,並且要從適當的包中進行對齊。然後確保你的項目中有一個正確定義的「beans.xml」文件。那麼你還需要明白,CDI的當前'@ ViewScoped'實現仍然是bug。 – kolossus 2014-11-03 01:11:39

+0

感謝您的評論。 – rLyLmZ 2014-11-05 12:28:00

回答

2

我刪除了ManagedBeanViewScoped在faces-config.xml中的定義settingsBean,並手動將它們添加到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; 
     } 
}