2010-07-09 19 views
9

Tôi có một dự án về Eclipse, Wicket, Spring, Hibernate. Mọi thứ đều hoạt động bình thường ngoại trừ: khi tôi thửwicket @SpringBean không thể tạo 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(); 
    } 
... 

biến dịch vụ là null? Ở bất kỳ nơi nào khác khi tôi sử dụng "dịch vụ" cấu thành này không phải là rỗng và hoạt động tốt. Làm ơn hãy giúp tôi giải quyết vấn đề này.

Trả lời

17

@SpringBean chỉ hoạt động trong bất kỳ Phân lớp thành phần nào.

Bạn cần phải làm như sau trong Constructor của bạn

wicket 1,4

InjectorHolder.getInjector().inject(this); 

Wicket 1.5+

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

Xem 'chung IDataProvider thực hiện' @http://stronglytypedblog.blogspot.com/2009/03/wicket-patterns-and-pitfalls-1.html

Thưởng thức

+0

Thank bạn. Điều này giải quyết vấn đề của tôi quá. – Bram

+0

Tôi không thấy 'InjectorHolder' trong Wicket 6. Làm thế nào để làm điều này trong wicket 6? –

+0

Điều này đã thay đổi với với wicket 1.5. xem https://cwiki.apache.org/confluence/display/WICKET/Migration+to+Wicket+1.5 – bert

0

Một chút ngữ cảnh cho những người mới làm quen với môi trường Wicket/Spring - như bert, được chỉ ra, @SpringBean chỉ hoạt động trong bất kỳ Phân lớp nào của Thành phần, do đó bạn sẽ cần phải điều khiển bằng tay. Đây là một quá trình 2 bước:

Lái tiêm trong lớp học của bạn, một cái gì đó như:

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(); 
    } 
} 

Và chắc chắn rằng các Injector được thiết lập trong ứng dụng Wicket - một cái gì đó như:

public WicketApplication 

    @Override 
    protected void init() { 
     // make sure Spring injector is available and set up 
     getComponentInstantiationListeners().add(new SpringComponentInjector(this)); 
    } 
} 
Các vấn đề liên quan