калитка постоянный объект между панелями

В калитке без сохранения в сеансе, как я могу иметь постоянный объект, например, список, который можно установить на одной панели и получить к нему доступ с другой. Я много гуглил, и я не совсем уверен, как это будет работать. Любая помощь будет принята с благодарностью! Спасибо.


person Matthew    schedule 30.06.2011    source источник
comment
без сохранения в сессию? Будет ли осуществляться доступ к списку из двух мест в рамках одного и того же цикла запроса?   -  person jensgram    schedule 30.06.2011
comment
поток логики будет таков, что одна панель создает список, который затем считывается другой панелью и заполняется в раскрывающемся списке.   -  person Matthew    schedule 30.06.2011
comment
@Matthew Я бы, вероятно, позволил какому-то экземпляру модели создать и удерживать (IModel из) List. Затем каждая панель ссылается на экземпляр модели для List (или IModel<List>). То есть ни одна панель не обрабатывает данные, они просто содержат ссылку на какой-то общий экземпляр модели.   -  person jensgram    schedule 30.06.2011
comment
@jensgram Спасибо за ответ, который мне очень помог. Не могли бы вы объяснить свою концепцию немного глубже, поскольку я понимаю теорию, но с практической стороны я не уверен, с чего начать. Спасибо   -  person Matthew    schedule 30.06.2011
comment
@jensgram Еще раз привет, у меня есть 1 класс, который добавляет панели, могу ли я создать здесь модель, а затем передать эту ссылку обоим классам, что позволит им обоим изменять один и тот же список? Спасибо.   -  person Matthew    schedule 30.06.2011
comment
@ Мэтью, я попытался привести пример. В этом случае ваш класс, который добавляет панели, будет содержать ссылку на экземпляр модели даты, который, в свою очередь, извлекает и предоставляет List (IModel<List>) данных.   -  person jensgram    schedule 30.06.2011


Ответы (1)


В связи с комментариями выше, я попытаюсь объяснить, что я думал.

Отказ от ответственности. Прошло больше года с тех пор, как я работал с Wicket, поэтому следующее следует рассматривать как общую проверку концепции. Я не могу гарантировать, что он скомпилируется (на самом деле, я почти наверняка могу гарантировать, что это не так).

public class MyPage extends ... {
    ...
    MyPageModel pm = new MyPageModel();
    add(new MyPanel1(pm));
    add(new MyPanel2(pm));
    ...
}

public class MyPageModel implements Serializable {
    private IModel<List<MyDataObject>> dataObjects;

    public MyPageModel() {
        this.dataObjects = // Load list from somewhere
    }

    public IModel<List<MyDataObject>> getDataObjects() {
        return this.dataObjects;
    }
}

public class MyPanel1 extends ... {
    private MyPageModel pageModel;

    public MyPanel1(MyPageModel pageModel) {
        this.pageModel = pageModel;
        ...
        add(new ListSomethingComponent<MyDataObject>(pageModel.getDataObjects)); // Some list renderer component which takes a IModel<List<MyDataObject>> as data
    }
}

public class MyPanel2 extends ... {
    private MyPageModel pageModel;

    public MyPanel2(MyPageModel pageModel) {
        // Same as MyPanel1...
    }
}
person jensgram    schedule 30.06.2011
comment
Это действительно так. Если компоненты, которые должны совместно использовать свои данные, тесно взаимодействуют друг с другом (в одном и том же или в последующих запросах), решением является общая модель. Если это не так, используйте переменную сеанса. - person biziclop; 30.06.2011