java – 如何创建隐藏其参数的Wicket URL?
我目前正在创建一组包含以下代码的链接:
BookmarkablePageLink<CheeseMain> havarti = new BookmarkablePageLink<CheeseMain>("havarti",CheeseMain.class); havarti.setParameter("Title","Havarti"); havarti.setParameter("Group","cheeseName"); add(havarti); 出来的URL具有格式 我的问题是我不再希望此链接的URL是可收藏的.理想情况下,我希望它像https://mysite.com/cheese一样简单,但我可以使用丑陋的URL.重要的是参数不可见. 我应该如何改变我生成链接的方式?我查看了Wicket提供的不同URL编码策略,但没有一个删除参数;他们只是以不同的方式展示 解决方法
仅当页面是可收起书签的,或者特定链接是可收藏的时,参数才会显示在URL中.
如果创建使用setResponsePage(页面)(传递Page实例)而不是setResponsePage(Class< Page>,PageParameters)(传递Page类)导航到页面的链接,则创建的链接将不会指向可收藏的版本页面,但是有状态的实例. 但是,要使其工作,您不能调用super(PageParameters)构造函数(以便Page没有足够的信息来构建无状态URL). 在此示例中,您可以通过两个不同的链接导航到SecretPage,一个是无状态的,可收起书签的,另一个是有状态的. SecretPage还有两个构造函数.一个人收到一个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> 并且,要拥有一个简单的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(一些方法和类被重命名,或移动到不同的包),但想法是一样的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |