Как привязать подпружиненную зависимость к странице калитки - PullRequest
1 голос
/ 16 ноября 2010

Как я могу привязать определенную зависимость к странице и вставить ее для компонентов на этой странице?

Я настроил среду в своем приложении wicket, используя (очень маленькие) библиотеки wicket-ioc и wicket-spring, где я могу вызвать InjectorHolder.getInjector (). Inject (component), чтобы внедрить компонент с зависимостями. Все мои компоненты калитки внедряются Spring через IComponentInstantiationListener, и эта часть работает (я использую его для доступа в спящий режим).

У меня есть сериализуемый объект (ComponentGraph), который я хочу сохранить в виде поля на странице. Как я могу заставить Spring выяснить, на какой странице находится компонент, и вставить правильный ComponentGraph для этой страницы, когда объявлено поле ComponentGraph с @SpringBean?

Если бы кто-то мог указать мне правильное направление, я был бы признателен. У меня есть четкое представление о калитке, но на данный момент Spring по-прежнему лабиринт незнакомых для меня концепций. =)

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Это не похоже на работу для Spring.

Однако я не знаю сферу действия вашего ComponentGraph, поэтому мне нужно сделать некоторые предположения.

a) Если естьпо одному на пользователя, сохраните его в пользовательском объекте сеанса .

b) Если существует один экземпляр на страницу, создайте класс базовой страницы, от которого наследуются все ваши такие страницы.Пусть у него есть поле componentGraph с геттером и сеттером.

в) Если существует один класс для каждой страницы, сохраните карту типа <Class, ComponentGraph> в компоненте-помощнике (доступном через что-то вроде helper.getComponentGraphForPageType(this.getClass()). Это может (и должно) быть введено через Spring

0 голосов
/ 17 ноября 2010

Spring поддерживает области запросов и сеансов, но не знает, какова область страницы Wicket. Не беспокойтесь, хотя. Если вы добавите фабрику графиков на страницу, вы можете сделать что-то вроде этого:

public class Page extends WebPage {
    @SpringBean private GraphFactory factory;
    private ObjectGraph graph = null;

    public Page() {
        ...
    }

    protected ObjectGraph getGraph() {
        if (graph == null) graph = factory.createGraph();
        return graph;
    }
}

После создания графика он будет сериализован с вашей страницей, как и ожидалось.

...