2017-01-12 7 views
0

Ich versuche, Komponenten zu aktualisieren und zu rendern, während das Formular mit onSubmit von IndicatingAjaxButton. Aber alle Komponenten werden gerendert, sobald onSubmit abgeschlossen ist. Gibt es eine Möglichkeit, ich kann sie rendern, während mein Formular noch einreicht, sagen Sie, um eine Aktualisierung Fortschrittsbalken zu zeigen, während das Formular einreicht. Ich möchte den Fortschritt anzeigen, während jeder Restanruf ausgeführt wird. Das ist ungefähr das, was ich tue:render Wicket-Komponenten beim Senden von Formular

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

Wenn ich verstehe, Sie denken über schnelle Submit (von Frontend auf der Serverseite akzeptiert) in hunderten von Millesec Max und lange Algorithm im Server-Backend? Geben Sie Code, um Ihnen zu helfen –

+0

der 2. Versuch zu erraten, ist der Upload von großen Dateien. Wicket hat einige ajaxified Lösungen (Führer auf der offiziellen Seite) –

Antwort

2

Der beste Ansatz für diese Wicket Mutter WebSockets zu verwenden ist. Mit IWebSocketRequestHandler können Sie während der langen Operation Wicket-Komponenten aktualisieren und/oder Rohtext (JSON, HTML) senden. Sie können so oft wie nötig drücken, z. Fortschritt in Prozenten zeigen.

Eine andere, einfachere Lösung besteht darin, den Callback AjaxCallListener # onBeforeSend() zu verwenden, um die UI-Aktualisierungen mit JavaScript vorzunehmen, bevor der Ajax-Aufruf (das Formular submit) erfolgt. Mit dieser Methode haben Sie nur eine Einstellung, d. H. Sie können eine Ladeanzeige anzeigen, aber Sie können den aktuellen Fortschritt nicht anzeigen.

Verwandte Themen