【问题标题】:How can I create a bookmarkable stateful page without versioning?如何在没有版本控制的情况下创建可书签的有状态页面?
【发布时间】:2013-11-06 04:35:56
【问题描述】:

Wicket 为页面和页面链接 (afaik) 提供了这些概念:

书签链接不依赖于任何会话信息。 URL 可能不包含会话 ID、版本号等。

有状态页面存储在服务器上,以便稍后在会话中使用(例如,用于 AJAX 通信或浏览器的返回功能)。无状态页面总是为每个请求重新创建。

页面版本控制为每个请求创建一个页面实例版本并将其存储在会话中。每个版本都有一个会话唯一 ID,用于在页面链接中直接寻址特定版本。 url 看起来像这样(“8”表示此会话中个人资料页面的第 8 版):http://.../wicket7/profile?8

Wicket 文档提到了这些dependencies

  • 无状态页面总是有可收藏的链接(有道理...)
  • 不可添加书签的链接始终指向有状态的页面(好吧,逻辑逆向...)
  • 有状态的页面可能同时具有可收藏和不可收藏的链接

似乎有状态的页面总是版本化的。但我相信在某些情况下您希望存储您的页面,但不进行版本控制。此外,在我看来,版本化页面没有可收藏的链接,因为版本 ID 依赖于会话。所以这是我的问题:

有状态页面是否总是版本化?是否有关闭版本控制但继续存储有状态页面的好习惯?

【问题讨论】:

  • 你不想要什么,存储一个页面的多个版本,或者在 URL 中附加一个数字?
  • 两者都好:版本控制需要 url 中的页面 id(如“...profile?8”),这使得它们无法添加书签(对我来说是一个劣势)。如果我不需要版本控制,那么我希望 id 从 url 中消失(它们不是必需的)。这将导致可收藏的网址。那有意义吗?我怎样才能做到这一点?
  • ?8 不会阻止添加书签,也不会重新创建页面状态。它只是告诉 Wicket 该页面是会话中的第 8 个页面,并且涉及相关的状态。但是,如果您的页面安装在例如/profile 并且有一个无参数构造函数(或具有 PageParameters 的构造函数),然后 Wicket 能够实例化页面,?8 将更改为当前会话的页面指针。

标签: wicket versioning bookmarks stateful


【解决方案1】:

弗兰克,

如果您不想在 url 中有“版本”,我建议将以下代码添加到您的 Application.init

getRequestCycleSettings().setRenderStrategy(RenderStrategy.ONE_PASS_RENDER);

查看RenderStrategy 了解更多信息。

【讨论】:

    猜你喜欢
    • 2012-04-14
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多