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

use*_*343 2 java wicket browser-refresh page-refresh

我正在使用付费角色系统,一旦用户刷新浏览器,我需要刷新该页面中可用的统计数据(统计数据应该来自数据库并显示).但是现在它无法正常工作,在页面刷新中,不会调用java代码,而是使用以前的数据加载缓存页面.我尝试修复它添加下面的代码,但它没有工作.

@Override
protected void setHeaders(WebResponse response) { 
    response.setHeader("Cache-Control",
            "no-cache, max-age=0,must-revalidate, no-store");
}
Run Code Online (Sandbox Code Playgroud)

有谁知道修复此问题?谢谢!
这是最初的代码

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>
Run Code Online (Sandbox Code Playgroud)


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);                
        }     
}
Run Code Online (Sandbox Code Playgroud)

ber*_*ert 5

你必须使用动态模型.例如,如果您使用类似的东西

add(new Label("name", Model.of(person.getName()));
Run Code Online (Sandbox Code Playgroud)

您将始终显示相同的字符串:您为标签提供结果person.getName().相反,你必须使用计算的价值为每个渲染请求,例如一个模型实现,PropertyModelAbstractReadOnlyModelgetObject()重写.

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

如果这还不够清楚,请发布一些代码,说明你在做什么.

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

Label label = new Label("someID", new PropertyModel(this, "XXX"));
Run Code Online (Sandbox Code Playgroud)

this小组在哪里.

请查看Wicket Wiki中的解释