Java 在浏览器刷新中刷新wicket面板
我正在使用付费角色系统,一旦用户刷新浏览器,我需要刷新该页面中可用的统计信息(统计信息应取自数据库并显示)。但是现在它不能正常工作,因为在页面刷新中,java代码不会被调用,而是用以前的数据加载缓存页面。 我尝试通过添加下面的代码来修复它,但效果不太好Java 在浏览器刷新中刷新wicket面板,java,wicket,page-refresh,browser-refresh,Java,Wicket,Page Refresh,Browser Refresh,我正在使用付费角色系统,一旦用户刷新浏览器,我需要刷新该页面中可用的统计信息(统计信息应取自数据库并显示)。但是现在它不能正常工作,因为在页面刷新中,java代码不会被调用,而是用以前的数据加载缓存页面。 我尝试通过添加下面的代码来修复它,但效果不太好 @Override protected void setHeaders(WebResponse response) { response.setHeader("Cache-Control", "no-cache,
@Override
protected void setHeaders(WebResponse response) {
response.setHeader("Cache-Control",
"no-cache, max-age=0,must-revalidate, no-store");
}
有人知道这个问题的解决办法吗?
谢谢
这是最初的代码
ManageCredits.html
<wicket:head>
<wicket:link>
<link rel="stylesheet" type="text/css" href="../css/style.css"/>
</wicket:link>
</wicket:head>
<wicket:panel xmlns:wicket="http://wicket.apache.org/">
<div class="offercount-container round-border">
<div class="manage-credits-lbl"><span>Manage Credits</span></div>
<div>
<ul>
<li>Balance amout:<span wicket:id="balanceAmtLbl" >0</span></li>
<li>Number if transactions<span wicket:id="transactionLbl" >0</span></li>
</ul>
</div>
</div>
</wicket:panel>
在HTML中,在
标记中添加以下行:
<meta http-equiv="cache-control" content="no-cache"/>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" />
这将强制浏览器从服务器检索详细信息。
您还可以实现url重写,以便在每次刷新页面时从服务器获取数据。
希望这有帮助。使用元标记并不能确保中间代理不会缓存页面。尝试将“Cache Control”标头与“Expires”结合使用,后者是HTTP 1.0标头,并且所有浏览器和代理都支持 发件人: 此标头字段(缓存控制)是HTTP 1.1版的一部分,并且是 被某些缓存和浏览器忽略。可以通过设置 将HTTP版本1.0标头字段值的过期时间早于 响应时间
关于HTTP缓存,您有一个很好的教程。您必须使用动态模型。例如,如果您使用
add(new Label("name", Model.of(person.getName()));
您将始终显示相同的字符串:为标签提供person.getName()
的结果。相反,您必须使用一个模型实现来计算每个渲染请求的值,例如PropertyModel
或AbstractReadOnlyModel
,并覆盖getObject()
Wicket只在页面上创建一次组件,每次请求时都会要求组件呈现自己。我猜您的代码不会被调用,因为它位于组件(页面、面板)的构造函数或onInitialze()
中
如果这还不够清楚,请在你正在做的事情上发布一些代码
编辑:据猜测,您使用的是静态模型(具有固定值的模型,而不是在每个渲染请求中计算其值的模型)。我在你的代码中看不到emailFanCount和openCount来自哪里,但假设它们是经过计算的。尝试在其中一个对象(客户端,…)上使用PropertyModel,或者在面板中添加一个公共字符串getXXX(){}
,并构建类似以下内容的标签:
Label label = new Label("someID", new PropertyModel(this, "XXX"));
其中此
为面板
请查看解释非常感谢您的回复,但我并不十分清楚。因此,我添加了一段代码。我尝试了这种方法,但在页面刷新中它仍然没有得到更新:(
Label label = new Label("someID", new PropertyModel(this, "XXX"));