我将此行为添加到组件(MarkupContainer)
AjaxSelfUpdatingTimerBehavior updateBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(3))
{
@Override
public void onEvent(Component component, IEvent<?> event) {
// some business logic
}
};
某处,在同一页面上,我有一个AjaxLink重定向到另一个页面(构造函数我将实际页面作为参数传递),在那个页面上我有一个&#34; Back&#34; AjaxLink重定向我,调用setResponsePage(myFirstPage)
。
问题在于,即使在渲染页面时行为更新一次,它也会在3秒内停止更新一次,就像构造一样。在离开页面之前没有遇到问题。
答案 0 :(得分:0)
可能不是最佳解决方案,但我设法通过删除页面的行为NavigationController
并再次添加来解决此问题。我在页面public static class YourStorage
{
public static object Storage1;
public static string StringStorage;
}
public class AnotherClass
{
private void GetDataFromStorage()
{
string getValue=YourStorage.StringStorage;
}
private void SetDataFromStorage()
{
YourStorage.StringStorage="new value";
}
}
答案 1 :(得分:0)
不一定是你问题的解决方案;但是我已经通过覆盖AjaxSelfUpdatingTimerBehavior的onConfigure方法实现了这个行为,如下所示。
在我的情况下,我不得不每隔10秒更新一次队列中当前记录计数的标签。
以下是代码段:
labelToBeUpdated.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(configurableDelay)) {
@Override
public void onConfigure(Component component) {
String inProgressOutOfTotal = "10/100"; //Business logic to get total count and inprogress count
labelToBeUpdated.setDefaultModel(Model.of(inProgressOutOfTotal));
//Set visibility of the component if needed
}
}
labelToBeUpdated.setOutputMarkupId(true);
好奇;是不是onEvent正在等待组件上的事件才能刷新?由于onConfigure是在渲染周期开始之前调用的,所以它对我有效。
但正如Sven Meier所说,你可能仍然希望通过onEvent获取代码。