离开并重新进入页面后,Wicket的AjaxSelfUpdatingTimerBehavior停止更新

时间:2016-01-29 09:55:10

标签: java web wicket

我将此行为添加到组件(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秒内停止更新一次,就像构造一样。在离开页面之前没有遇到问题。

2 个答案:

答案 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获取代码。