2013-03-15 69 views
0

我試圖訪問託管bean構造函數中的會話bean數據。爲此,我使用下面的@ManagedProperty註釋。當我嘗試訪問構造函數時,它會給出java.lang.NullPointerException,並且可以在另一個函數中訪問同一段代碼。可能是我需要爲構造函數做一些不同的事情。有人能指導我需要做什麼嗎?在JSF託管bean的構造函數中訪問會話bean數據

@ManagedProperty(value="#{sessionBean}") 
private SelectCriteriaBean sessionData; 

// This is contructor 
public ModifyBusinessProcessBean() { 
    logger.debug(getSessionData().getSelectedBusinessProcessLevelZero());  
} 

// Another Function where the same code doesn't give error 
public anotherFunction() { 
    logger.debug(getSessionData().getSelectedBusinessProcessLevelZero());  
} 

回答

3

您不應該在構造函數中使用@ManagedProperty,因爲它尚未設置。當首先創建託管bean時,會調用其構造函數,然後使用setter設置託管屬性。您應該使用與@PostConstruct標註的方法,因爲它的屬性被設置後調用:

@PostConstruct 
public void init() { 
    logger.debug(getSessionData().getSelectedBusinessProcessLevelZero()); 
} 
+0

哈!行動中的併發:) – skuntsel 2013-03-15 08:51:46

+0

是的,那真的是。 :) – partlov 2013-03-15 08:53:13

+0

+1輸入速度:) – skuntsel 2013-03-15 08:55:18

3

這是預期的行爲。

@PostConstruct方法在bean的構建和注入依賴項之後執行,例如@ManagedProperty已經發生。所以你的依賴不會在構造函數中可用。

你需要做註釋的方法與@PostConstruct,並參閱你的依賴什麼是標準方式:

@PostConstruct 
public void init() { 
    injectedDependency.performOperation(); 
}