Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在浏览器刷新中刷新wicket面板_Java_Wicket_Page Refresh_Browser Refresh - Fatal编程技术网

Java 在浏览器刷新中刷新wicket面板

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,

我正在使用付费角色系统,一旦用户刷新浏览器,我需要刷新该页面中可用的统计信息(统计信息应取自数据库并显示)。但是现在它不能正常工作,因为在页面刷新中,java代码不会被调用,而是用以前的数据加载缓存页面。 我尝试通过添加下面的代码来修复它,但效果不太好

@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"));