2011-05-26 26 views
0

我有一個會話bean:爲什麼NPE在這個豆子?

<managed-bean> 
    <managed-bean-name>mainMenuNavigationBean</managed-bean-name> 
    <managed-bean-class>com.cloud.common.jsf.core.beans.MainMenuNavigationBean</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

我注入請求Bean這樣的:

<managed-bean> 
    <managed-bean-name>createAccountBean</managed-bean-name> 
    <managed-bean-class>com.cloud.common.jsf.account.CreateAccountBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>mainMenuNavigationBean</property-name> 
     <property-class>com.cloud.common.jsf.core.beans.MainMenuNavigationBean</property-class> 
     <value>#{mainMenuNavigationBean}</value> 
    </managed-property> 
</managed-bean> 

現在,我想用我的createAccountBean的@PostConstruct二傳手,但我不瞭解爲什麼mainMenuNavigationBean是空這裏...我希望它可以自動創建的,如果無效,訪問createAccountBean

@PostConstruct 
    public void init() { 
     userLoginVo = new UserLoginVo(); 
     //NPE here 
     mainMenuNavigationBean.setExternalPage(true); 
    } 

你能給我一個提示嗎?我無法理解我在做什麼錯...

+0

應該工作。你是否正在運行你認爲你正在運行的'faces-config.xml'?保存/重建/重新部署/重新啓動/等。當然,也請閱讀服務器日誌中的任何警告。 – BalusC 2011-05-26 12:41:25

回答

0

爲了讓<managed-property>正常工作,您需要確保待注入的bean是一個public類,其中包含(隱含的)public默認構造函數在施工時不會拋出任何異常。

public class MainMenuNavigationBean { 

    public MainMenuNavigationBean() { 
     // Can even be omitted altogether if you don't have other constructors. 
    } 

    // ... 
} 

而且你需要確保接受者有一個有效的屬性和一個工作setter。

public class CreateAccountBean { 

    private MainMenuNavigationBean mainMenuNavigationBean; 

    public void setMainMenuNavigationBean(MainMenuNavigationBean mainMenuNavigationBean) { 
     this.mainMenuNavigationBean = mainMenuNavigationBean; 
    } 

    // ... 
} 

心靈的this在二傳手,如果你省略,二傳手沒有效果。