我在付费角色系统上工作,一旦用户刷新浏览器,我需要刷新该页面中的统计数据(统计数据应该来自数据库并显示)。但是现在它无法正常工作,在页面刷新中,不会调用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>
ManageCredits.java
import com.payrole.service.Offer;
import com.payrole.service.OfferService;
import com.payrole.service.ServiceLocator;
import com.payrole.wicket.PayroleLabel;
import java.text.Format;`enter code here`
import org.apache.wicket.markup.html.panel.Panel;
public class OfferFanSummaryPanel extends Panel{
private long balance;
private long transactionCount;
public OfferFanSummaryPanel(String id){
super(id);
}
public OfferFanSummaryPanel(String id, Offer offer) {
super(id);
balance = (client.getBalance()==null) ? 0 : client.getBalance();
transactionCount = (client.getTransactionCount()==null) ? 0 : client.getTransactionCount();
initTransactionSummary();
}
private void initTransactionSummary(){
PayroleLabel balanceAmtLbl = new PayroleLabel("balanceAmtLbl", String.valueOf(balanceAmt), PayroleLabel.NUMBER);
add(balanceAmtLbl);
PayroleLabel transactionLbl = new PayroleLabel("transactionLbl", String.valueOf(transaction), PayroleLabel.NUMBER);
add(transactionLbl);
}
}
答案 0 :(得分:5)
您必须使用动态模型。例如,如果您使用类似
的内容add(new Label("name", Model.of(person.getName()));
您将始终显示相同的字符串:您为标签提供person.getName()
的结果。相反,您必须使用模型实现来计算每个呈现请求的值,例如PropertyModel
或AbstractReadOnlyModel
并重写getObject()
。
Wicket仅在页面上创建一次组件,并且每个请求都会要求组件自行呈现。我猜你的代码没有被调用,因为它在组件的构造函数或onInitialze()
中(页面,面板)。
如果这还不够清楚,请发一些关于你正在做的事情的代码。
编辑:正如猜测的那样,您使用的是静态模型(具有固定值的模型,而不是在每个渲染请求中计算其值的模型)。我没有在你的代码中看到emailFanCount和openCount来自哪里,但假设这些以某种方式计算。尝试在其中一个对象(客户端,...)上使用PropertyModel,或者向您的面板添加public String getXXX() {}
并构建与此类似的标签:
Label label = new Label("someID", new PropertyModel(this, "XXX"));
其中this
是Panel。
查看in the Wicket Wiki以获取解释
答案 1 :(得分:0)
在HTML中,在<head>
标记中添加以下行:
<meta http-equiv="cache-control" content="no-cache"/>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" />
这将强制浏览器从服务器检索详细信息。 每次刷新页面时,您还可以实现URL重写以从服务器获取数据。 希望这会有所帮助。
答案 2 :(得分:0)