2017-01-12 5 views
0

Я пытаюсь обновить и отобразить компоненты при отправке формы, используя onSubmit of IndicatingAjaxButton. Но все компоненты получаются после того, как onSubmit завершен. Есть ли способ, которым я могу отобразить их, пока моя форма все еще отправляется, скажем, чтобы показать обновленную панель прогресса при отправке формы. Я хочу показать прогресс по мере выполнения каждого вызова отдыха. Это примерно то, что я делаю:визуализировать компоненты калитки при отправке формы

public class MyPage { 
    Form form; 
    int items; 
    WebMarkupContainer progressbar = new WebMarkupContainer("progressbar"); 
    int progress = 0; 
    MyData dataItems = new MyData(); 

    public MyPage() { 
     progressbar.setOutpuMarkupId(true); 
     items = 5; 
     setupForm(); 
    } 

    public void setupForm() { 
     form = new Form("form", new CompundPropertyModel(dataItems)); 
     form.add(new IndicatingAjaxButton("button") { 
      @Override 
      protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
       for (int i = 0; i < items; i++) { 
        progress++; 
        progressbar.add(new AttributeModifier("style", "width: " + progress + "%;")); 
        //rest post call goes here 
       } 
      } 
     }); 
    } 

    add(form); 
    add(progressbar); 

} 


//in html page 
<div wicket:id="progressbar" id="progressbar" style="width: 0% ; background-color:green;"></div> 
+0

Если я понимаю, вы думаете о быстрой отправке (принято интерфейсом на стороне сервера) в сотнях миллисекунд и длинном алгоритме на сервере? Дайте код, который поможет вам –

+0

Вторая попытка угадать, это загрузка больших файлов. У Wicket есть некоторые ajaxified решения (руководство на официальном сайте) –

ответ

2

Лучший подход заключается в использовании Wicket Native WebSockets. С помощью IWebSocketRequestHandler вы можете обновлять Wicket Components и/или отправлять сырые тексты (JSON, HTML) во время длительной операции. Вы можете нажать столько раз, сколько необходимо, например. чтобы показать прогресс в процентах.

Другим, более простым решением является использование обратного вызова AjaxCallListener # onBeforeSend(), чтобы сделать обновления пользовательского интерфейса с JavaScript перед выполнением вызова Ajax (форму submit). При таком подходе у вас есть только один выстрел, т. Е. Вы можете показать индикатор загрузки, но вы не можете показать текущий прогресс.