Wie kann ich eine Wicket-URL, hinter der sich seine Parameter?
Ich bin derzeit auf der Schaffung einer Reihe von Verknüpfungen mit code wie diesem:
BookmarkablePageLink<CheeseMain> havarti =
new BookmarkablePageLink<CheeseMain>("havarti", CheeseMain.class);
havarti.setParameter("Title", "Havarti");
havarti.setParameter("Group", "cheeseName");
add(havarti);
Die URL kommt, hat das format
https://mysite.com/;jsessionid=B85EE5CB0349CCA2FE37AF76AB5C30C1?wicket:bookmarkablePage=:com.mycompany.cheese.CheeseMain&Title=Havarti&group=cheeseName
.
Mein problem ist, dass ich nicht mehr möchtest, dass die URL für diese Verknüpfung, um sein bookmarkable. Im Idealfall würde ich es gerne etwas einfacher, wie https://mysite.com/cheese
, aber damit kann ich Leben mit einer falschen URL. Das wichtigste ist, dass die Parameter nicht sichtbar.
Wie sollte ich ändern, wie ich meine links generieren? Ich habe die verschiedenen URL-Kodierung-Strategien, Wicket bietet, aber keiner von Ihnen entfernen, die Parameter; Sie müssen nur zeigen Sie sich anders.
- Das weglassen der "Bookmarkable" - bit, verwenden Sie eine einfache
PageLink
. Wenn ich mich richtig erinnere, sollte es funktionieren. - Ich habe versucht, verwenden Sie ein standard -
Link
-- eigentlich eine Unterklasse vonLink
, daLink
ist Abstrakt-aber es erfordert eine Menge anderer änderungen.PageLink
veraltet ist, in der Javadoc empfiehlt, entwederBookmarkablePageLink
oderLink
statt. - Torgamus Gut, verwenden Sie ein
Link
dann. 🙂 Oder Sie können live mit es als veraltet, und verwenden SiePageLink
. Obwohl ich nicht sehen, wie mit einemLink
können viel komplizierter sein. Können Sie fügen Sie einige weitere Details über diese? Vielleicht können wir arbeiten, eine einfache Lösung mitLink
s - Gut,
Link
keinesetParameter()
Methode, also behalf ich mir mit einerPageParameters
Objekt. Aber das erfordert einen neuen Konstruktor für die Ziel-Seite. Ich habe Probleme beim Verständnis der session/request-handling in der Ziel-Seite, aber über den Rahmen dieser Frage. - Sie möchten eine URL oder eine
Link
? - Soweit ich weiß, vorbei an einem
PageParameters
Instanz dersetResponsePage
Methode und ruftBookmarkablePageLink.setParameter()
hat den gleichen Effekt. - Torgamus sollten Sie den super-Konstruktor
Page(PageParameters params)
unabhängig. Es wird in denPage
Klasse zum speichern dieser Parameter. Wenn Sie nur den leeren Konstruktor, nachfolgende AufrufePage#getPageParameters()
null zurück, auch wenn SieBookmarkablePageLink#setParameter()
. Möglicherweise haben Sie nicht auf dieses problem noch nicht, aber Sie wird... - Was mir sorgen macht über
PageParameters
ist, dass Wicket in Action sagt: "Eine Seite wird als bookmarkable, wenn ... es hat einen Konstruktor, einePageParameters
Instanz als das einzige argument." @biziclop - das ist nicht zu kritisch ein Thema für mich, als, die Seite, dessen Parameter kommen derzeit über eine anderer Pfad.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Parameter in der URL erscheinen nur, wenn die Seite bookmarkable, oder der link ist bookmarkable.
Wenn Sie eine
Link
dass zu der Seite navigiert mitsetResponsePage(Page)
(übergeben von einer Seite-Instanz) stattsetResponsePage(Class<Page>, PageParameters)
(vorbei an einer Page-Klasse), die Verknüpfung wird nicht auf die bookmarkable version der Seite, aber zu einer zustandsbehafteten Instanz.Diese Arbeit zu machen, obwohl, müssen Sie nicht, rufen Sie die
super(PageParameters)
Konstruktor (so, dass die Seite nicht genügend Informationen haben, um bauen Sie die stateless-URL).In diesem Beispiel, Sie können navigieren Sie zu der
SecretPage
durch zwei verschiedene links, eine Staatenlose, bookmarkable, und die andere statusbehaftete.SecretPage
hat ebenfalls zwei Konstruktoren. Man erhält einePageParameters
und fordertsuper
übergeben. Der andere bekommt den Wert direkt über construcor parameter, und nicht übergeben es ansuper
(wenn es genannt würdesuper(new PageParameters().add("message",message)
, als in die auskommentierte Zeile würde es automatisch umleiten auf eine bookmarkable URL).HomePage.java:
HomePage.html:
SecretPage.java
SecretPage.html
Und, eine einfache URL, wie
http://host/app/secret
ist, müssen Sie es bereitstellen. Sie können es in IhremWebApplication
Klasse.WicketApplication.java
In diesem Beispiel verwendet Wicket 1.5 (immer noch RC4.2), und einige Modifikationen vorgenommen werden müssen, um die Arbeit mit 1.4.x (einige Methoden und Klassen umbenannt wurden, oder in verschiedenen Paketen), aber die Idee ist die gleiche.
SecretPage
Konstruktor. Warum ist es ein argument zutoString()
? Das wird nicht mal kompilieren, für mich.parameters.getString("message", "No message!")
toString()
. Ich habe nicht einmal in Erwägung, dass; ich dachte, es war ein Tippfehler. Mit diesem Update, dies scheint zu funktionieren wie beschrieben. Nun, um herauszufinden, wie es zu ändern für mein Projekt....Könnte man immer noch verwenden Sie Ihre URL-Codierung Strategie der Wahl und Kapseln Ihre Parameter in einer vererbten Klasse, wie zum Beispiel:
Dann können Sie verwenden:
new BookmarkablePageLink<Void>("havarti", Havarti.class)
.