在JSF托管bean的构造函数中访问会话bean数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JSF托管bean的构造函数中访问会话bean数据相关的知识,希望对你有一定的参考价值。

我试图访问托管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();
}

以上是关于在JSF托管bean的构造函数中访问会话bean数据的主要内容,如果未能解决你的问题,请参考以下文章

在哪个阶段构造托管bean以及使用哪个构造函数

JSF 2.x @ViewScoped 托管 bean 线程安全吗?

使用 URL 参数的 JSF 托管 Bean 方法调用

在托管 bean 构造函数中访问注入的依赖项会导致 NullPointerException

如何将 JSF 托管 bean 属性传递给 JavaScript 函数?

多次调用 JSF Backing Bean 构造函数