パラメータは、ページがブックマーク可能な場合、または特定のリンクがブックマーク可能な場合にのみ、URLに表示されます。あなたは(Pageクラスを渡す)の代わりにsetResponsePage(Class<Page>, PageParameters)
の(ページのインスタンスを渡す)setResponsePage(Page)
を使用してページに移動Link
を作成する場合
、作成したリンクは、ページのブックマークのバージョンに、しかしステートフルを指していますインスタンス。
このようにするには、super(PageParameters)
コンストラクタを呼び出さないでください(ページにステートレスURLを構築するのに十分な情報がないようにする必要があります)。
この例では、ステートレス、ブックマーク可能、ステートフルの2つの異なるリンクを介してSecretPage
にナビゲートできます。
SecretPage
にも2つのコンストラクタがあります。 1つはPageParameters
を受け取り、super
を呼び出します。もう一方は、construcorパラメータを介して直接値を受け取り、super
に渡しません(コメント行のようにsuper(new PageParameters().add("message",message)
を呼び出すと、ブックマーク可能なURLに自動的にリダイレクトされます)。
HomePage.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"));
}
});
}
}
HomePage.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>
そして、http://host/app/secret
のような単純なURLを使用するには、それをマウントする必要があります。 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;
}
}
この例では、自動改札1.5(まだRC4.2)を使用し、1.4.xので動作するようにいくつかの変更を必要とする(一部のメソッドやクラスの名前が変更、または別のパッケージに移動された)が、アイデアがあります同じ。
「ブックマーク可能」ビットを省略し、単純な「PageLink」を使用します。私が正しく覚えていれば、うまくいくはずです。 – biziclop
@biziclop:私は標準の 'Link'を使用しようとしていました。' Link'の抽象クラスなので、 'Link'のサブクラスです。 'PageLink'は推奨されていません。Javadocは代わりに' BookmarkablePageLink'か 'Link'を使うことを勧めます。 – Pops
@Lord Torgamusさて、 'Link'を使ってください。 :)またはあなたはそれが廃止され、 'PageLink'を使用して暮らすことができます。私は 'Link'を使うのがはるかに複雑になることはわかりませんが。これについてもう少し詳細を追加できますか?私たちは 'Link'sで簡単な解決法を試すことができます。 – biziclop