我已经得到了这个旧的Apache Wicket 1.5 Web应用程序。
所有URL似乎都以?xxx
结尾,其中xxx
是一个数字。这似乎是Wicket的“功能”,可让您对先前显示的网页进行版本控制/缓存。听起来似乎不错,但实际上,这对于所有相关用户而言无非是头疼,即使页面上显示的基础数据发生了变化并且用户强制刷新页面,旧的,过时的页面仍会重新加载。
我已经在线浏览过,在Wicket的文档中,它似乎被称为“版本”。
我尝试通过调用setVersioned(false)
来禁用它,但是没有用-我看不到任何区别。有谁知道如何使它工作?
谢谢
答案 0 :(得分:2)
问题是您的应用程序将数据缓存到模型中。在Wicket术语中,这称为static
模型。
例如:
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();
}
}));
在这里,标签将在每次渲染此标签/页面时呈现该人的当前情绪。
URL中的pageId告诉Wicket要从页面存储中查找和加载哪个有状态页面。只有有状态的页面具有此类ID。如果要摆脱它,则应仅在页面中使用无状态组件和行为。 wicket-devutils
模块提供StatelessChecker
,可帮助您确定Page意外变为有状态的原因。
对于您而言,我不确定哪种解决方案会更容易-重做模型或使页面无状态。通常,第一个比较容易。