2010-07-09 25 views
9

Tengo un proyecto en Eclipse, Wicket, Spring, Hibernate. Todo funciona normalmente salvo que: cuando intentowicket @SpringBean no puede crear 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(); 
    } 
... 

¿la variable de servicio es nula? En cualquier otro lugar cuando uso este "servicio" de construcción, no es nulo y funciona bien. Por favor ayúdame a resolver este problema.

Respuesta

17

@SpringBean funciona solo en cualquier Subclase de componente.

que tiene que hacer lo siguiente en su constructor

Wicket 1,4

InjectorHolder.getInjector().inject(this); 

Wicket 1.5+

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

Ver 'genérico aplicación IDataProvider' @http://stronglytypedblog.blogspot.com/2009/03/wicket-patterns-and-pitfalls-1.html

Disfruta

+0

Gracias tú. Esto resolvió mi problema también. – Bram

+0

No veo 'InjectorHolder' en Wicket 6. ¿Cómo hacer esto en wicket 6? –

+0

Esto ha cambiado con wicket 1.5. ver https://cwiki.apache.org/confluence/display/WICKET/Migration+to+Wicket+1.5 – bert

0

Un poco más de contexto para los novatos en el entorno de Wicket/Spring: como señaló, @SpringBean funciona solo en cualquier Subclase de componente, por lo que deberá administrar la inyección manualmente. Este es un proceso de 2 pasos:

Conduce la inyección en su clase, algo como:

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

Y asegúrese de que el inyector está configurado en la aplicación Wicket - algo así como:

public WicketApplication 

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