2016-01-29 5 views
0

я добавил это поведение к компоненту (MarkupContainer)Уикет останавливает обновление после выхода и повторного ввода страницы

AjaxSelfUpdatingTimerBehavior updateBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(3)) 
    { 


     @Override 
     public void onEvent(Component component, IEvent<?> event) { 
      // some business logic 
     } 

    }; 

Где-то, на той же странице у меня есть AjaxLink, которая перенаправляет на другую страницу (в кто конструктор, я передаю фактическую страницу в качестве параметра), и на этой странице у меня есть «Назад» AjaxLink, который перенаправляет меня назад, вызывая setResponsePage(myFirstPage).

Проблема заключается в том, что даже при том, что при обновлении страницы поведение обновляется один раз, она перестает обновляться один раз в 3 секунды, как было построено для. Нет проблемы с поведением до выхода из страницы.

ответ

0

Возможно, это не лучшее решение, но мне удалось исправить его, удалив поведение onBeforeRender() и добавив снова. Я объявил поле на странице private int autoUpdateBehaviorId = -1;

public void addUpdateBehavior(Component c) 
{ 
    if(autoUpdateBehaviorId >= 0) 
     c.remove(c.getBehaviorById(autoUpdateBehaviorId)); 


    AjaxSelfUpdatingTimerBehavior updateBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(3)) 
    { 

     @Override 
     public void onEvent(Component component, IEvent<?> event) { 
      // bussines logic 
     } 
    }; 
    c.add(updateBehavior); 
    autoUpdateBehaviorId = c.getBehaviorId(updateBehavior); 
} 


@Override 
protected void onBeforeRender() { 
    super.onBeforeRender(); 
    addUpdateBehavior(myContainer); 
} 
+0

Я не вижу причин, почему это не должно работать без workaroud. Можете ли вы создать быстрый старт и прикрепить его к проблеме Jira? – svenmeier

0

не обязательно решение вашей проблемы; но я реализовал это поведение, переопределив методConfigure метода AjaxSelfUpdatingTimerBehavior, как показано ниже.

В моем случае мне пришлось обновить метку с подсчетом текущих записей в очереди каждые 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 вызывается до начала цикла рендеринга, он работает для меня.

Но, как сказал Свен Мейер,, вы все еще можете работать над его советом, чтобы получить код с onEvent.

Смежные вопросы