Java Wicket-evry请求上的刷新组件(实现会话超时倒计时)

Java Wicket-evry请求上的刷新组件(实现会话超时倒计时),java,session,timeout,refresh,wicket,Java,Session,Timeout,Refresh,Wicket,我有一个Wicket 6.10.0 Web应用程序。我想实现一个计时器来显示当前用户会话中的剩余时间。有些东西与此相关: 我的页面页脚有一个Wicket标签。这个标签使用JavaScript来倒计时,例如从5分钟倒计时到0分钟0瑞典克朗。此倒计时(标签)应在每次请求时刷新 现在的问题是如何做到这一点 在init()方法中,我添加了AbstractRequestCycleListener,它通知我每个结束请求,如下所示: getRequestCycleListeners().add(new

我有一个Wicket 6.10.0 Web应用程序。我想实现一个计时器来显示当前用户会话中的剩余时间。有些东西与此相关:

我的页面页脚有一个Wicket
标签
。这个标签使用JavaScript来倒计时,例如从5分钟倒计时到0分钟0瑞典克朗。此倒计时(标签)应在每次请求时刷新

现在的问题是如何做到这一点

init()
方法中,我添加了
AbstractRequestCycleListener
,它通知我每个结束请求,如下所示:

  getRequestCycleListeners().add(new AbstractRequestCycleListener() {

     @Override
     public void onEndRequest(RequestCycle cycle) {
        super.onEndRequest(cycle);
        System.out.println("End Request - here i would like to refresh somehow the label");

     }

  });
但我不知道如何将此消息发送到标签以刷新自身。有什么想法吗

*E D I T: 我有一个水疗中心:

<body>
lots of AJAX components here
<div wicket:id="footer">Footer always stays here. <br />
Session timeout in: <span wicket:id="sessionTimeoutLabel">countdown here</span>
</div>
</body>

这里有很多AJAX组件
页脚总是留在这里
会话超时:此处为倒计时
倒计时有点像这样:


现在,对于每一个AJAX请求,我都需要重新加载
sessiontimeextabel
标签,以便从600秒开始计算到0秒。

不要过于关注“请求结束”。这大约是渲染阶段结束后的10µs。还请注意,会话超时在每次请求后都会重置,因此不需要使用新值更新标签,只需将其重置为会话超时参数即可

您应该在某个地方有一个参数指示您配置的会话超时,并使用该参数显示标签,如果它是特定于应用程序的,则可以在应用程序类中创建一个getter:

公共MyApplication扩展了WebApplication{
公共静态最终整型会话\u超时=30;//分钟
public int getSessionTimeout(){
返回会话超时;
}
}
在页脚中,您可以添加标签:

添加(新标签(“timeout”,PropertyModel.of(此“application.sessionTimeout”)); 或者,如果它是会话的属性,则可以将getter添加到自定义会话:

public MySession扩展了WebSession{
公共静态最终整型会话\u超时=30;//分钟
public int getSessionTimeout(){
返回会话超时;
}
}
并在标签中检索它:

add(新标签(“timeout”,PropertyModel.of(this,“session.sessionTimeout”));

属性模型的表达式利用了组件具有a和a的事实。

我想您误解了我的意思。我已经编辑了我的问题。我需要在每次请求之后将SessionTimeLabel添加到一个
AjaxRequestTarget
,它将被重新提交。我没有测试它,但您可以覆盖标签组件的OneEvent,获取AjaxRequestTarget(RequestCycle.get().find(AjaxRequestTarget.class)),检查它是否为null,然后将标签添加到其中。顺便说一句,Martijn答案是+1。我知道我可以覆盖
onEvent()
,但它应该对哪个事件做出反应
Request
RequestCycle
不要实现
IEventSource
…您可以忽略事件并使用mrak的描述检索AjaxRequestTarget。如果为null,则为正常页面刷新,如果可用,则将标签(事件处理程序中的this指针)添加到targetJust little background info为什么可以“忽略”事件:。