wicket - 如何在 Apache Wicket 1.5 中禁用页面版本控制?setVersioned(false) 似乎还不够
问题描述
我收到了这个旧的 Apache Wicket 1.5 Web 应用程序。
所有的 URL 似乎都以 结尾?xxx
,其中xxx
是一个数字。这似乎是 Wicket 的“功能”,允许您对以前显示的网页进行版本/缓存。尽管听起来不错,但实际上这对所有相关用户来说都是一件令人头疼的事情,因为即使页面上显示的基础数据发生变化并且用户强制刷新页面,旧的、陈旧的页面仍然会重新加载。
我在网上浏览过,在 Wicket 的文档中,它似乎被称为“版本控制”。
我试图通过调用来禁用它,setVersioned(false)
但它无济于事——我看不出有什么明显的区别。有谁知道如何让它工作?
谢谢
解决方案
问题是您的应用程序将数据缓存到模型中。在 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
帮助您识别页面意外变为有状态的原因。
在您的情况下,我不确定哪种解决方案更容易 - 返工模型或使页面无状态。通常第一个更容易。
推荐阅读
- google-chrome - Chrome 何时将 0 以外的值传递给 --parent-window 的本机消息传递主机?
- css - 有没有办法从左到右为图像的颜色设置动画?
- java - 在 Flutter 中访问 Java API
- android - 我对谷歌地图和地点选择器有疑问
- celery - 芹菜任务代码的不同项目,并调用
- algorithm - 生成数字序列的算法
- wordpress - 我想使用不同的菜单作为页面
- python - 从 numpy 数组加载 Tensorflow 记录问题
- php - PHP中数组的排列
- vba - 可以添加哪些 VBA 验证逻辑来防止用户在 Microsoft Access 中输入任何大于 8 的数字?