我试图访问托管bean构造函数中的会话bean数据。为此,我使用@ManagedProperty
注释如下。当我尝试访问构造函数时,它会给出java.lang.NullPointerException
,并且在另一个函数中可以访问同一段代码。可能是我需要为构造函数做一些不同的事情。有人可以指导我需要做什么。
@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());
}
你不应该在构造函数中使用@ManagedProperty
,因为它尚未设置。创建托管bean时,首先调用其构造函数,然后使用setter设置托管属性。您应该使用@PostConstruct
注释的方法,因为在设置属性后调用它:
@PostConstruct
public void init() {
logger.debug(getSessionData().getSelectedBusinessProcessLevelZero());
}
这是预期的行为。
在构造bean之后立即执行@PostConstruct
方法,并且已经发生了依赖关系的注入,例如@ManagedProperty
。因此,您的依赖项将无法在构造函数中使用。
您需要做什么来使用@PostConstruct
注释方法并引用您的依赖项是一种标准方式:
@PostConstruct
public void init() {
injectedDependency.performOperation();
}