gpt4 book ai didi

java - 在浏览器刷新中刷新 Wicket 口面板

转载 作者:行者123 更新时间:2023-11-30 06:30:58 24 4
gpt4 key购买 nike

我在一个付费角色系统上工作,一旦用户刷新浏览器,我需要刷新该页面中可用的统计数据(统计数据应该从数据库中获取并显示)。但是现在它不能正常工作,因为在页面刷新中不会调用 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);
}
}

最佳答案

你必须使用动态模型。例如,如果您使用类似

add(new Label("name", Model.of(person.getName()));

您将始终显示相同的字符串:您为标签提供 person.getName() 的结果。相反,您必须使用模型实现来计算每个渲染请求的值,例如覆盖了 getObject()PropertyModelAbstractReadOnlyModel

Wicket 只在您的页面上创建一次组件,并且在每次请求时都要求组件呈现自己。我猜你的代码没有被调用,因为它在构造函数或组件(页面、面板)的 onInitialze() 中。

如果这还不够清楚,请发布一些您正在做的代码。

编辑:正如猜测的那样,您正在使用静态模型(具有固定值的模型,而不是在每个渲染请求上计算其值的模型)。我在您的代码中看不到 emailFanCount 和 openCount 的来源,但假设这些是通过某种方式计算出来的。尝试在你们其中一个对象(客户端,..)上使用 PropertyModel,或者向面板添加一个 public String getXXX() {} 并构建与此类似的标签:

Label label = new Label("someID", new PropertyModel(this, "XXX"));

this 是面板。

看看in the Wicket Wiki求解释

关于java - 在浏览器刷新中刷新 Wicket 口面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10023100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com