калитка: как обновить компонент после AjaxLazyLoadPanel? - PullRequest
1 голос
/ 23 мая 2011

У меня есть страница с текстовой меткой статуса и панель, выполняющая какой-либо запрос к БД. так как запрос может занять некоторое время, я загружаю его, используя

add(new AjaxLazyLoadPanel("resultPanel")
{
    @Override
public Component getLazyLoadComponent(String id) {
        return new SearchResultPanel(id);
    }
};

, который работает очень хорошо.

У меня вопрос, как обновить метку состояния, которая находится за пределами панели результатов, чтобы показать количество результатов поиска?

Я думал в духе addComonent (цель), но у меня нет цели? я с трассы?

Ответы [ 3 ]

1 голос
/ 23 мая 2011

Ну, SearchResultPanel может выглядеть так:

public class SearchResultPanel extends Panel implements IHeaderContributor{
   public SearchResultPanel(String id){
      super(id);
      ....
   }
   public void renderHead(IHeaderResponse response){
      response.renderOnDomReadyJavascript("alert('hello');");
   }
}

Теперь, когда он загружен, он должен выбросить этот javascript. Другой способ ответа на stackoverflow ранее (хотя мне это не нравится) - использовать AjaxSelfUpdatingTimerBehavior, который, если только javascript не должен запускаться больше, чем когда-то мне не нравится, и все же он менее элегантен, на мой взгляд.

Найдите здесь ответ: Калитка: перезагрузите AjaxLazyLoadPanel автоматически

0 голосов
/ 22 августа 2014

Случайно наткнулся на этот пост, и мне есть что добавить.

AjaxLazyLoadPanel теперь имеет переопределяемый метод onComponentLoaded (Component, AjaxRequestTarget )что также может решить вашу проблему.

0 голосов
/ 23 мая 2011

Вы всегда можете получить текущую цель запроса, используя RequestCycle.get().getRequestTarget(), при условии, что существует активный цикл запроса, так что теоретически вы можете сделать это из своего лени-загруженного конструктора компонента, проверить, является ли это целью Ajax, и добавить компонент, если он есть.

Другим решением является поиск исходного кода AjaxLazyLoadPanel и создание собственного компонента на его основе. (Это действительно просто, но, как вы можете видеть, если вы посмотрите на код, вы не сможете заставить его выставить цель запроса. Это не очень полезная вещь, но все важные функции заключены в конструкторе. , у вас очень мало выбора ..

Я бы не стал вмешиваться в Javascript, если на самом деле нет другого пути.

...