0

我正在尝试访问托管 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());     
}
4

2 回答 2

3

您不应该使用@ManagedProperty内部构造函数,因为它尚未设置。首先创建托管 bean 时,会调用其构造函数,然后使用 setter 设置托管属性。您应该使用带有注释的方法,@PostConstruct因为它在设置属性后被调用:

@PostConstruct
public void init() {
  logger.debug(getSessionData().getSelectedBusinessProcessLevelZero());
}
于 2013-03-15T08:48:24.760 回答
3

这是预期的行为。

@PostConstruct方法在 bean 的构造和依赖注入发生后立即执行,例如@ManagedProperty。因此,您的依赖项在构造函数中根本不可用。

您需要用@PostConstruct一种标准方式来注释方法并引用您的依赖项:

@PostConstruct
public void init() {
    injectedDependency.performOperation();
}
于 2013-03-15T08:50:59.077 回答