如何在ApacheWicket 1.5中禁用页面版本控制?setVersioned(false)不';似乎还不够

如何在ApacheWicket 1.5中禁用页面版本控制?setVersioned(false)不';似乎还不够,wicket,Wicket,我得到了这个旧的ApacheWicket 1.5Web应用程序 所有URL似乎都以?xxx结尾,其中xxx是一个数字。这似乎是一个Wicket“功能”,允许您对以前显示的网页进行版本设置/缓存。虽然听起来不错,但实际上这对所有相关用户来说都只是一个头痛的问题,因为即使页面上显示的底层数据发生变化,用户强制刷新页面,旧的、陈旧的页面仍然会被重新加载 我在网上浏览过,在Wicket的文档中,它似乎被称为“版本控制” 我试图通过调用setVersioned(false)来禁用它,但没有效果——我看不到

我得到了这个旧的ApacheWicket 1.5Web应用程序

所有URL似乎都以
?xxx
结尾,其中
xxx
是一个数字。这似乎是一个Wicket“功能”,允许您对以前显示的网页进行版本设置/缓存。虽然听起来不错,但实际上这对所有相关用户来说都只是一个头痛的问题,因为即使页面上显示的底层数据发生变化,用户强制刷新页面,旧的、陈旧的页面仍然会被重新加载

我在网上浏览过,在Wicket的文档中,它似乎被称为“版本控制”

我试图通过调用
setVersioned(false)
来禁用它,但没有效果——我看不到明显的差异。有人知道如何让它工作吗


谢谢

问题在于应用程序将数据缓存到模型中。在Wicket术语中,这称为
静态
模型

例如:

Person person123 = personService.get(123);

// a static model
page.add(new Label("personMood", new Model(person123.getMood())));
在这里,标签将始终显示标签实例化时的人的情绪。此人可能会在下一秒改变情绪,但标签仍将显示旧的/缓存的值

// a dynamic model
page.add(new Label("personMood", new Model<String>() {
  @Override public String getObject() {
     return person123.getMood();
  }
}));
//动态模型
页面添加(新标签(“personMood”,新型号)(){
@重写公共字符串getObject(){
returnPerson123.getMood();
}
}));
在这里,标签将在每次呈现此标签/页面时呈现人物的当前情绪

url中的pageId告诉Wicket要从页面存储中查找和加载的有状态页面。只有有状态的页面才有这样的id。如果你想去掉它,那么你应该在页面中只使用无状态的组件和行为。有一个
wicket devutils
模块,它提供了
StatelessChecker
,帮助您在页面意外变为有状态时确定原因


在您的情况下,我不确定哪种解决方案更容易-返工模型或使页面无状态。通常第一种方法比较简单。

问题是应用程序将数据缓存到模型中。在Wicket术语中,这称为
静态
模型

例如:

Person person123 = personService.get(123);

// a static model
page.add(new Label("personMood", new Model(person123.getMood())));
在这里,标签将始终显示标签实例化时的人的情绪。此人可能会在下一秒改变情绪,但标签仍将显示旧的/缓存的值

// a dynamic model
page.add(new Label("personMood", new Model<String>() {
  @Override public String getObject() {
     return person123.getMood();
  }
}));
//动态模型
页面添加(新标签(“personMood”,新型号)(){
@重写公共字符串getObject(){
returnPerson123.getMood();
}
}));
在这里,标签将在每次呈现此标签/页面时呈现人物的当前情绪

url中的pageId告诉Wicket要从页面存储中查找和加载的有状态页面。只有有状态的页面才有这样的id。如果你想去掉它,那么你应该在页面中只使用无状态的组件和行为。有一个
wicket devutils
模块,它提供了
StatelessChecker
,帮助您在页面意外变为有状态时确定原因


在您的情况下,我不确定哪种解决方案更容易-返工模型或使页面无状态。通常第一个更容易。

您实际上不想禁用它。pageId与缓存无关。Wicket处理服务器端状态非常重要。请解释您试图解决的实际问题。@martin-g问题是我有一个包含数据的屏幕。用户点击refresh希望看到更新的数据,但它仍然显示10分钟前第一次进入页面时的情况。这意味着应用程序没有以正确的方式使用Wicket模型。谷歌“Wicket动态与静态模型”。有一个很好的维基页面。啊,我明白了。有没有办法避免wicket将?xxx放在它生成的链接上?因为似乎取出它们总是迫使wicket刷新页面中的数据。我收到的web应用程序很大,并且处于维护模式,除了在这里和那里进行快速修复之外,触摸它真的没有多大意义。消除wicket URL中页面版本控制的一种方法是使用一次通过的呈现作为呈现策略。然而,这有一些相当大的缺点,我不推荐它。你最终可能会打破比修复更多的东西。另请参见您实际上不想禁用此功能。pageId与缓存无关。Wicket处理服务器端状态非常重要。请解释您试图解决的实际问题。@martin-g问题是我有一个包含数据的屏幕。用户点击refresh希望看到更新的数据,但它仍然显示10分钟前第一次进入页面时的情况。这意味着应用程序没有以正确的方式使用Wicket模型。谷歌“Wicket动态与静态模型”。有一个很好的维基页面。啊,我明白了。有没有办法避免wicket将?xxx放在它生成的链接上?因为似乎取出它们总是迫使wicket刷新页面中的数据。我收到的web应用程序很大,并且处于维护模式,除了在这里和那里进行快速修复之外,触摸它真的没有多大意义。消除wicket URL中页面版本控制的一种方法是使用一次通过的呈现作为呈现策略。然而,这有一些相当大的缺点,我不推荐它。你最终可能会打破比修复更多的东西。另见