java – 如何创建隐藏其参数的Wicket URL?

我目前正在创建一组包含以下代码链接
BookmarkablePageLink<CheeseMain> havarti =
    new BookmarkablePageLink<CheeseMain>("havarti",CheeseMain.class);
havarti.setParameter("Title","Havarti");
havarti.setParameter("Group","cheeseName");
add(havarti);

出来的URL具有格式
https://mysite.com/;jsessionid=B85EE5CB0349CCA2FE37AF76AB5C30C1?wicket:bookmarkablePage=:com.mycompany.cheese.CheeseMain\u0026amp;Title=Havarti\u0026amp;group=cheeseName.

我的问题是我不再希望此链接的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(一些方法和类被重命名,或移动到不同的包),但想法是一样的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?
Java菜单驱动程序以检查数字类型
使用Junit的Maven项目 - 检查银行账号
JAVA编程基础
在Java中使用throw、catch和instanceof来处理异常
在Java中,将数组分割为基于给定查询的子数组后,找到子数组的最大子数组和
如何在Java中从给定的字符串中删除HTML标签?
在PHP中,IntlChar getBlockCode()函数的翻译如下:
如何在Android中实现按下返回键再次退出的功能?
如何使用Java中的流式API解析JSON字符串?
Java中的模式类