2011-03-02 4 views
13

Я пытаюсь вставить весь управляемый компонент JSF в другой управляемый bean-компонент с помощью аннотации @ManagedProperty (очень похоже на Possible to inject @ManagedBean as a @ManagedProperty into @WebServlet?, но я впрыскиваю в bean-компонент, а не в сервлет). Это то, что я делаю:Как внедрить весь управляемый bean-компонент с помощью аннотации @ManagedProperty?

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

ответ

29

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

@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 рассосется и впрыснуть зависимости он будет использовать сеттеры инъекций так соответствующие сеттеры/добытчиками должно быть there.otherwise он не найдет свойство

+1

Просто примечание, для xhtml JSF переводит _foo в getFoo и setFoo, для управляемого di вам действительно нужны get_foo и set_foo! – Rob

+1

Другое примечание> Для инъекций требуется только сеттер. Ref> http://www.mkyong.com/jsf2/injecting-managed-beans-in-jsf-2-0/ – Sergio

Смежные вопросы