GWT загружает элементы динамически при загрузке страницы

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

Теперь мне это нравится:

  1. сделать вызов rpc при загрузке компонента (получение данных для входов)
  2. onSuccess динамически добавлять входные данные в форму

результат: форма отображается без содержимого (поскольку вызывает асинхронный вызов), только после изменения размера она отображает содержимое правильно (возможно, я могу запустить событие resize или redraw от себя, не знаю как ..)

вопрос: я новичок в GWT, как лучше всего выполнить эту задачу? (Сейчас я использую gwt-ext http://gwt-ext.com/, но я думаю, что это не так иметь значение )

обновление: для обновления панели можно вызвать doLayout();


person Sergey    schedule 14.05.2013    source источник


Ответы (2)


Я не знаком с gwt-ext, но в "vanilla" gwt у вас есть два варианта:

  1. Обновите свой виджет (который должен показать результат) в методе onSuccess
  2. Продолжайте выполнение остальной части кода только после получения результата.

Чтобы получить более точную информацию, мне понадобится больше вашего кода.

person Ben    schedule 14.05.2013
comment
там слишком много кода, у меня есть макет TabPanel и есть доступ к Panel gwt-ext.com/docs/2.0.4/com/gwtext/client/widgets/Panel.html, который содержит мою форму, как обновить виджет в ванили; а как делаешь Proceed, блокируешь все приложение пока (! result) {}? - person Sergey; 14.05.2013
comment
Обновление обычно можно выполнить только для определенных виджетов, таких как таблицы или списки. Поэтому, если в вашей форме нет метода обновления / перерисовки, он не нужен. - person Ben; 14.05.2013
comment
Чтобы отложить остальную часть вашего кода, вы можете поместить его в новый метод и вызвать его в методе onSuccess. Новый метод может состоять из создания этой формы и ее прикрепления к панели. - person Ben; 14.05.2013
comment
сделать задержку, это невозможно сделать для меня, потому что я должен вернуть панель, чтобы отобразить ее (поэтому основное приложение ждет мою форму), вызов onSuccess будет пропущен - person Sergey; 14.05.2013

У меня была аналогичная проблема, содержимое моего виджета загружалось в течение нескольких секунд. Я показываю надпись "" Идет загрузка, подождите ... "", пока виджет не загрузится:

final VerticalPanel mainPanel = new VerticalPanel();

    initWidget(mainPanel); 
    mainPanel.add(new Label("Loading, please wait ..."));
    mainPanel.add(new myCustomWidget()); // this constructor uses RPC to get content

    Timer t = new Timer()
    {
        public void run()
        {
            if (!mainPanel.getWidget(1).isVisible()) { 
                // do nothing
            } else {
                // remove label "Loading, please wait ..."
                mainPanel.remove(0);
                // stop timer
                cancel(); 
            }
        }
    };
    // repeat every 30 miliseconds until myCustomWidget is visible
    t.scheduleRepeating(30); 
person kiedysktos    schedule 10.10.2014