web-dev-qa-db-ja.com

@ManagedPropertyアノテーションを介してマネージドBean全体を注入する方法は?

@ManagedPropertyアノテーションを使用してJSFマネージドBean全体を別のマネージドBeanに注入しようとしています( @ ManagedBeanを@ManagedPropertyとして@WebServletに注入できますか? と非常によく似ていますが、サーブレットではなく、Beanに注入しています)。これは私がしていることです:

@ManagedBean
public class Foo {
  @ManagedProperty(value = "#{bar}")
  private Bar bar;
}

@ManagedBean
public class Bar {
}

動作しません(JSF 2.0/Mojarra 2.0.3):

SEVERE: JSF will be unable to create managed bean foo when it is 
requested.  The following problems where found:
- Property bar for managed bean foo does not exist. Check that 
  appropriate getter and/or setter methods exist.

可能ですか、それともFacesContextを介してプログラムでこの注入を行う必要がありますか?

15
yegor256

セッターとゲッターを追加する必要があります

@ManagedBean
public class Foo {
  @ManagedProperty(value = "#{bar}")
  private Bar bar;
  //add setters and getters for bar
  public Bar getBar(){
      return this.bar;
  }
  public void setBar(Bar bar){
      this.bar = bar;;
  }
}

FacesContextが依存性を解決して注入する場合、セッター注入を使用するため、適切なセッター/ゲッターが存在する必要があります。そうでない場合、プロパティが見つかりません。

31
Jigar Joshi