калитка @SpringBean не может создать боб - PullRequest
9 голосов
/ 09 июля 2010

У меня есть проект на Eclipse, Wicket, Spring, Hibernate. Все работает нормально, кроме: когда я пытаюсь

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

служебная переменная равна нулю? В любых других местах, когда я использую эту конструкцию, «сервис» не является нулевым и работает хорошо. Пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

17 голосов
/ 09 июля 2010

@ SpringBean работает только в любом подклассе компонента.

Вам нужно сделать следующее в конструкторе

Калитка 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 голосов
/ 09 мая 2014

Немного больше контекста для тех, кто является новичком в среде Wicket / Spring - как указывал Берт, @SpringBean работает только в любом подклассе компонента, поэтому вам нужно будет управлять инжекцией вручную. Это двухэтапный процесс:

Проведите инъекцию в своем классе, что-то вроде:

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