2013-11-07 2 views
1

Я разрабатываю мастер с помощью GWT. На первой странице мастера у меня есть компонент формы для загрузки файла. На панели мастера у меня есть следующая кнопка, когда я нажимаю следующую кнопку, метод проверки будет срабатывать, если валидация будет передана, тогда я вызываю form.submit(); но до того, как обработчик form.submit() запускает функциональные возможности, методы проверки завершают его. После того, как он завершает метод проверки, только форма представляет, что он действительно принимает участие. Как я могу контролировать поведение этого события, когда я отправляю форму с помощью form.submit(), остальные действия должны ждать, пока эта форма не вернется к своему обработчику.Обработка событий GWT. Необходимо заблокировать событие до отправки формы.

Advance Thanks.

+0

Не могли бы вы перефразировать вопрос? Если я хорошо вас понимаю, вы хотите дождаться завершения проверки, прежде чем делать подачу. Это так ? – otonglet

+0

да то же самое ... – Arung

ответ

0

Предполагая, что вы есть FormPanel:

FormPanel form = new FormPanel(); 

Вы можете добавить обработчик:

form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() { 

    public void onSubmitComplete(SubmitCompleteEvent event) { 
     // TODO: Do the next step in the wizard 
     // Use event.getResults() to get the text of the response 
    } 
}); 
+0

Все в порядке. но вы неправильно поняли этот вопрос. Pbm - это другое событие, которое запускает функцию form.submit(). Мне нужна функция, которую нужно подождать, пока функция submit() не завершит работу. Как этот код может работать над этим сценарием? – Arung

+1

Не имеет значения, какое событие срабатывает form.submit(), обработчик отправки будет по-прежнему запускаться. –

+0

Проблема заключается в том, что функция, вызвавшая форму .submit(), должна ждать, пока формы onsubmitcomplete listener не будут завершены. Надеюсь, вы поняли сейчас. – Arung

0

Написать булево, который вы установите истина, как только проверка будет завершена. Затем запустите таймер, ожидающий этого логического. Но рассмотрите возможность использования событий и обратных вызовов для повторного использования. Использование таймера сделает ваш код грязным, если вы злоупотребляете им.

@UiHandler("submit") 
protected void onSubmit() { 
    validated=false; 
    validate(); 
    Scheduler.get().scheduleFixedDelay(new RepeatingCommand() { 
     public boolean execute() { 
      if (validated) { 
       if (validationSucceeded()) { 
        submit(); 
       } 
       return false; 
      } 
      return true; 
     } 
    }, 250); 
} 

private boolean validated = false; 

private void validate() { 
    // do validation 
    validated=true; 
} 
Смежные вопросы