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

これが予想される動作です。

@PostConstructメソッドは、Beanの構築と、などの依存性の注入が行われた直後に実行さ@ManagedPropertyれます。したがって、依存関係はコンストラクターで使用できなくなります。

メソッドにアノテーションを付け@PostConstructて依存関係を参照するために必要なのは、標準的な方法です。

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

@ManagedProperty内部コンストラクターはまだ設定されていないため、使用しないでください。マネージドBeanが作成されると、最初にそのコンストラクターが呼び出され、次にマネージドプロパティがセッターで設定されます。@PostConstructプロパティが設定された後に呼び出されるので、注釈付きのメソッドを使用する必要があります。

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