Ответ на ваши вопросы ... Предполагается, что вы используете Wicket 1.4.x.
Во-первых, у вас может быть много уровней Page
классов, часто имитирующих совпадение дизайна и функции. Например, скажем, у вас есть приложение, в котором люди «пишут», «просматривают» и «читают» созданные пользователем книги.
RootPage - common headers/footers, javascript imports
AbstractWritePage extends RootPage - for anything regarding authoring
AbstractBrowsePage extends RootPage - browsing
AbstractReadPage extends ReadPage - reading
Затем я реализую что-то вроде:
FullLibraryPage extends AbstractBrowsePage
FilterSearchPage extends AbstractBrowsePage
В конце концов, это становится сложным, но очень мощным.
Во-вторых, ваши компоненты Panel становятся видимыми / невидимыми. Если вы используете Wicket 1.4.x, вы должны посмотреть на переопределяемый метод onConfigure()
для каждой панели. На этой панели вы можете установить видимость как:
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(!navTriggered);
}
где navTriggered
- логическое значение, находящееся на содержащей странице. Тогда ваша ссылка может сделать простое:
@Override
protected void onClick(AjaxRequestTarget target) {
navTriggered = false;
target.addComponent(/* Appropriate panels; see below for multiples */);
}
Преимущество этого заключается в том, что у вас может быть несколько панелей, запускаемых одной и той же логической переменной. Нет ничего плохого в создании всех ваших панелей во время создания страницы, даже если они изначально невидимы.
Наконец, если у вас есть много панелей, которые необходимо изменить / запустить / и т.д., рассмотрите возможность объединения IVisitor
с интерфейсом маркировки. Что-то вроде ...
public class Panel1 implements MyPanelGroup { ... }
public class Panel2 implements MyPanelGroup { ... }
Затем вы можете использовать IVisitor
, чтобы посетить каждый экземпляр MyPanelGroup
на странице и сделать что-то с видимостью (либо установить видимость, добавить его к AjaxRequestTarget
и т. Д.).
Надеюсь, что что-то ответит:)