Как внедрить весь управляемый компонент с помощью аннотации @ManagedProperty? - PullRequest
15 голосов
/ 02 марта 2011

Я пытаюсь внедрить весь управляемый компонент JSF в другой управляемый компонент с помощью аннотации @ManagedProperty (очень похоже на . Возможно ли ввести @ManagedBean как @ManagedProperty в @WebServlet? , но я вкалываю в боб, а не в сервлет). Вот что я делаю:

@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?

1 Ответ

31 голосов
/ 02 марта 2011

Вам нужно добавить сеттеры и геттеры

@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 разрешит и внедрит зависимости, он будет использовать установку сеттеров, поэтому там должны быть соответствующие сеттеры / геттеры. В противном случае он не найдет свойство

...