2011-03-02 91 views
13

我試圖通過@ManagedProperty註釋(非常類似於Possible to inject @ManagedBean as a @ManagedProperty into @WebServlet?,但我注入到一個bean,而不是一個servlet)注入整個JSF託管bean到另一個託管bean。這是我在做什麼:如何通過@ManagedProperty註釋注入整個託管bean?

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

@ManagedBean 
public class Bar { 
} 

不工作(JSF 2.0/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

您需要添加getter和setter方法

@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將解析和注入依賴它會使用setter方法注射所以相應的設置器/吸氣應該there.otherwise也不會找物業

+1

只需注意,對於xhtml JSF將_foo轉換爲getFoo和setFoo,對於託管的di,實際上需要get_foo和set_foo! – Rob 2012-12-27 10:06:28

+1

其他注意事項>只有注射才需要使用注射器。參考> http://www.mkyong.com/jsf2/injecting-managed-beans-in-jsf-2-0/ – Sergio 2013-10-28 15:03:25