【问题标题】:Wicket RestartResponseException with session带有会话的 Wicket RestartResponseException
【发布时间】:2013-10-04 14:12:14
【问题描述】:

我们有两个挂载 URL 的页面(运行 Wicket 6.11)。当浏览器(使用 Chromium 尝试)打开带有特定参数的页面 1 的 URL 时,构造函数会在会话中保存一条信息并重定向到页面 2(伪代码):

public Page1(Pageparameters parameters) {
    super(parameters);

    String value = parameters.get("magicProperty").toString();
    if (value != null && isValid(value)) {
       Serializable key = createKey(value);
       getSession().setAttribute("key", key);
       throw new RestartResponseException(Page2.class);
    }
}

在第 2 页的结构中,我们想再次从会话中获取密钥:

public Page2(PageParameters parameters) {
    super(parameters);

    Serializable key = getSession().getAttribute("key");
    ...
}

问题是,当新打开浏览器时,第 2 页中的 keynull - 看起来会话对象是为第 2 页新创建的。我该如何解决/解决这个问题?

【问题讨论】:

  • RestartResponseException 到 Page2 将调用“Page2()”构造函数(没有 PageParameters)。

标签: java session wicket


【解决方案1】:

我不知道为什么,但在抛出 RestartResponseException 之前,我似乎需要调用 session.bind()

public Page1(Pageparameters parameters) {
    super(parameters);

    String value = parameters.get("magicProperty").toString();
    if (value != null && isValid(value)) {
       Serializable key = createKey(value);
       Session session = getSession();
       session.setAttribute("key", key);
       session.bind();
       throw new RestartResponseException(Page2.class);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多