Страница калитки со списком панелей - PullRequest
1 голос
/ 08 сентября 2011

Я работаю над веб-приложением, использующим Apache Wicket, и у меня есть три типа страниц, которые в основном представляют собой нумерованный список.Разница между ними заключается в том, как отображаются элементы в списке.(т.е. у одного есть строка заголовка и параграф, у другого просто есть абзац).В конце концов, данные будут поступать из базы данных, но в данный момент они недоступны.

Я думаю, что могу сделать это, создав страницу, отображающую RepeatingView, которая получает свои элементы из ArrayList of Panels.Я бы создал разные панели для каждого типа элемента списка.Затем я мог бы расширить вышеупомянутую страницу до трех подклассов, по одному для каждого конкретного типа панелей, которые я хочу.Я на правильном пути или есть лучший способ сделать это?

Ответы [ 2 ]

5 голосов
/ 17 сентября 2011

Я считаю, что RepeatingView очень гибок в работе с такими вещами, и вам не нужно требовать трех отдельных страниц.Он ожидает только добавления компонента в ретранслятор, а не какой компонент.Пока вы сохраняете свои идентификаторы Wicket согласованными, вы можете даже смешивать компоненты, которые поставляются с собственной разметкой (например, Panel / Fragment).

Я также не рекомендую использовать Список панелей.Просто имеет смысл программировать, чтобы список содержал ваши данные и затем добавлял соответствующий контейнер представления на основе некоторого флага.

Итак, разметка выглядит так:

<div wicket:id="repeater">
   <div wicket:id="listItem" />
</div>

Работает с чем-то вроде:

RepeatingView rv = new RepeatingView("repeater");

for (DataObject o : dataList) {
   // You can probably add to the rv directly, but this is the common usage
   WebMarkupContainer c = new WebMarkupContainer(rv.newChildId());
   rv.add(c);
   if (shortVersion)
       c.add(new ShortPanel("listItem", new Model<DataObject>(o)));
   else
       c.add(new LongPanel("listItem", new Model<DataObject>(o)));
}

Вместо предоставления списка панелей для вашей страницы, вы предоставляете тот же список данных из базы данных, а затем добавляете различные панели на основе текущего представления.

В конце концов, у вас есть одна страница (с флагом для типа представления) и разные панели (или фрагменты) для того, как ваши данные должны выглядеть в соответствии с каждым типом представления.

0 голосов
/ 09 сентября 2011

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

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

...