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

时间:2019-04-08 14:17:06

标签: wicket

我已经得到了这个旧的Apache Wicket 1.5 Web应用程序。

所有URL似乎都以?xxx结尾,其中xxx是一个数字。这似乎是Wicket的“功能”,可让您对先前显示的网页进行版本控制/缓存。听起来似乎不错,但实际上,这对于所有相关用户而言无非是头疼,即使页面上显示的基础数据发生了变化并且用户强制刷新页面,旧的,过时的页面仍会重新加载。

我已经在线浏览过,在Wicket的文档中,它似乎被称为“版本”。

我尝试通过调用setVersioned(false)来禁用它,但是没有用-我看不到任何区别。有谁知道如何使它工作?

谢谢

1 个答案:

答案 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意外变为有状态的原因。

对于您而言,我不确定哪种解决方案会更容易-重做模型或使页面无状态。通常,第一个比较容易。