Да, это правда. У Wicket есть собственный сложный механизм обработки URL-адресов и способов перенаправления браузера на конкретную цель. В Wicket использование двух и более разных путей для монтирования одного и того же класса страниц не имеет понятия (по умолчанию).
РЕШЕНИЕ 1
Если вы действительно хотите получить одинаковую функциональность для разных URL-адресов, используйте простой потомок
public class StandardPage2 extends StandardPage {
//... define the same constructors from StandardPage
}
Ваш код
@Override
protected void init(){
super.init();
mountPage("/index.html", StandardPage.class);
mountPage("/another.html", StandardPage2.class);
}
Не забывайте правильно использовать
setResposonsePage(StandardPage.class);
or
setResposonsePage(StandardPage2.class);
РЕШЕНИЕ 2
В следующем примере показано, как можно использовать параметр страницы как часть URL-адреса. Допустим, в базе данных есть пользователи, и у каждого пользователя есть собственная страница, доступная по уникальному URL-адресу. Также каждый пользователь может выполнять некоторые необязательные операции, и имя операции всегда включается в URL-адрес, и есть некоторые другие страницы, подключенные к их собственным URI. Таким образом, URI должны выглядеть
/home
/login
/logout
/martin
/martin/edit
/martin/detail
/petr
/petr/edit
/petr/detail
/
/texts/my-super-article-1
/texts/my-super-article-2
/events/actual
/fotos/from-my-first-holiday
/fotos/from-my-second-holiday
В этом случае можно использовать MontedMapper по умолчанию, который когда-либо был реализован в Wicket. Отображение
mountPage("/home", HomePage.class);
mountPage("/login", LoginPage.class);
mountPage("/logout", LogoutPage.class);
mountPage("/${nick}/${action}", UserProfilePage.class);
mountPage("/texts/${page}", TextPages.class);
mountPage("/events/${page}", EventPages.class);
mountPage("/fotos/${page}", FotoPages.class);
и вам нужно реализовать UserProfilePage и его конструктор с PageParameters
public class UserProfilePage extends WebPage {
public UserProfilePage(PageParameters pageParameters) {
super(pageParameters);
StringValue nick = pageParameters.get("nick");
StringValue action = pageParameters.get("action");
// any code
String nickName = nick.toString();
boolean defaultAction = action.isEmpty(); // default action
}
}
РЕШЕНИЕ 3
Также вы можете переопределить IRequestMapper и некоторые другие классы, но я думаю, что это слишком сложно и не нужно в вашем случае.
person
Martin Strejc
schedule
25.12.2013