仅当页面可添加书签或特定链接可添加书签时,参数才会出现在 URL 中。
如果您使用(传递 Page 实例)而不是(传递 Page 类)创建Link
导航到页面的链接,则创建的链接将不会指向页面的可书签版本,而是指向有状态的实例。setResponsePage(Page)
setResponsePage(Class<Page>, PageParameters)
但是,要完成这项工作,您不能调用super(PageParameters)
构造函数(这样 Page 就没有足够的信息来构建无状态 URL)。
在此示例中,您可以SecretPage
通过两个不同的链接导航到 ,一个是无状态的、可收藏的,另一个是有状态的。
SecretPage
也有两个构造函数。一个人收到 aPageParameters
并调用super
传递它。另一个直接通过 contrucor 参数接收值,并且不将其传递给super
(如果它调用super(new PageParameters().add("message",message)
,如注释行中所示,它将自动重定向到可收藏的 URL)。
主页.java:
public class HomePage extends WebPage {
public HomePage(final PageParameters parameters) {
add(new BookmarkablePageLink<Void>("bookmarkable", SecretPage.class,
new PageParameters().add("message", "This message will appear in the URL")));
add(new Link<Void>("instance") {
@Override
public void onClick() {
setResponsePage(new SecretPage("This message will NOT appear in the URL"));
}
});
}
}
主页.html:
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
<body>
<p><a wicket:id="bookmarkable">Bookmarkable link (stateless)</a></p>
<p><a wicket:id="instance">Hidden parameters link (stateful)</a></p>
</body>
</html>
SecretPage.java
public class SecretPage extends WebPage {
public SecretPage(PageParameters parameters) {
super(parameters);
init(parameters.get("message").toString("No message!"));
}
public SecretPage(String message) {
// super(new PageParameters().add("message", message)); // COMMENTED!
init(message);
}
private void init(String message) {
info(message);
add(new FeedbackPanel("feedback"));
add(new BookmarkablePageLink<Void>("back", getApplication().getHomePage()));
}
}
SecretPage.html
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
<body>
<p wicket:id="feedback"></p>
<p><a wicket:id="back">BACK</a></p>
</body>
</html>
而且,要拥有一个简单的 URL,例如http://host/app/secret
,您必须挂载它。你可以在你的WebApplication
课堂上做。
WicketApplication.java
public class WicketApplication extends WebApplication {
@Override
protected void init() {
super.init();
mountPage("home", getHomePage());
mountPage("secret", SecretPage.class);
}
public Class<HomePage> getHomePage() {
return HomePage.class;
}
}
此示例使用 Wicket 1.5(仍为 RC4.2),需要进行一些修改才能与 1.4.x 一起使用(一些方法和类被重命名,或移动到不同的包),但想法是相同的。