Я считаю, что 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)));
}
Вместо предоставления списка панелей для вашей страницы, вы предоставляете тот же список данных из базы данных, а затем добавляете различные панели на основе текущего представления.
В конце концов, у вас есть одна страница (с флагом для типа представления) и разные панели (или фрагменты) для того, как ваши данные должны выглядеть в соответствии с каждым типом представления.