2010-07-09 51 views
9

我在Eclipse,Wicket,Spring,Hibernate上有一個項目。每件事都正常工作,除了:當我嘗試wicket @SpringBean無法創建bean

public class SortableContactDataProvider extends SortableDataProvider<User> 
{ 
    @SpringBean 
    private Service service; 

    public Iterator<User> iterator(int first, int count) 
    { 
     //SortParam sp = getSort(); 
     return service.findAllUsers().subList(0, 15).iterator(); 
    } 
... 

服務變量爲空?在任何其他地方,當我使用這個構造時,「服務」不是空的並且運行良好。請幫我解決這個問題。

回答

17

@SpringBean只能在Component的任何子類中使用。

你需要做在你的構造

檢票以下1.4

InjectorHolder.getInjector().inject(this); 

檢票1.5+

org.apache.wicket.injection.Injector.get().inject(this); 

參見 '通用IDataProvider實行' @http://stronglytypedblog.blogspot.com/2009/03/wicket-patterns-and-pitfalls-1.html

享受

+0

謝謝您。這也解決了我的問題。 – Bram 2013-05-16 11:56:37

+0

我在Wicket 6中看不到'InjectorHolder'。如何在Wicket 6中做到這一點? – 2013-06-24 13:28:11

+0

隨着檢票口1.5的改變。請參閱https://cwiki.apache.org/confluence/display/WICKET/Migration+to+Wicket+1.5 – bert 2013-06-25 11:02:42

0

對於那些Wicket/Spring環境的新手來說,更多的上下文 - 正如bert所指出的,@SpringBean只能在Component的任何子類中使用,因此您需要手動驅動注入。這是一個兩步驟的過程:

驅動注射在類的東西如:

public class SortableContactDataProvider extends SortableDataProvider<User> 
{ 
    @SpringBean 
    private Service service; 

    public SortableContactDataProvider(){ 
     Injector.get().inject(this); // set up the injection 
    } 

    public Iterator<User> iterator(int first, int count) 
    { 
     return service.findAllUsers().subList(0, 15).iterator(); 
    } 
} 

,並確保噴油器設置在Wicket應用程序 - 這樣的:

public WicketApplication 

    @Override 
    protected void init() { 
     // make sure Spring injector is available and set up 
     getComponentInstantiationListeners().add(new SpringComponentInjector(this)); 
    } 
}