パラメータは、ページがブックマーク可能である場合、または特定のリンクがブックマーク可能である場合にのみ、URL に表示されます。
(Page クラスを渡す) の代わりに (Page インスタンスを渡す) をLink
使用してページに移動するを作成すると、作成されたリンクはページのブックマーク可能なバージョンではなく、ステートフル インスタンスを指します。setResponsePage(Page)
setResponsePage(Class<Page>, PageParameters)
ただし、これを機能させるには、super(PageParameters)
コンストラクターを呼び出してはなりません (ステートレス URL を構築するのに十分な情報が Page にないため)。
SecretPage
この例では、2 つの異なるリンク (1 つはステートレス、ブックマーク可能、もう 1 つはステートフル) を介してに移動できます。
SecretPage
には 2 つのコンストラクターもあります。を受け取り、それを渡してPageParameters
呼び出します。super
もう 1 つはコンストラクター パラメーターを介して直接値を受け取り、それを に渡しません(コメント行のようにsuper
が呼び出された場合、ブックマーク可能な URL に自動的にリダイレクトされます)。super(new PageParameters().add("message",message)
ホームページ.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 で動作するように変更する必要があります (一部のメソッドとクラスは名前が変更されたか、別のパッケージに移動されました) が、考え方は同じです。