2016-08-09 28 views
1

Ich wollte meine eigene Nachrichtenbox-Klasse erstellen, damit ich verschiedene Arten von Nachrichten erstellen kann (z. B. ohne Schaltflächen). Für die Fachnachrichten möchte ich eine automatische Schließung nach sagen wir 5 Sekunden Verzögerung.automatisches Schließen des Vaadin-Fensters nach Verzögerung

Ich habe das Internet gesucht: Ich fand sehr alte Beiträge, die ProgressIndicator oder einige "neuere" (4yo) mit Push/Poll/Threading vorschlagen. Ich frage mich wirklich, ob es inzwischen in Vaadin 7.6 eine saubere Lösung gibt. Push/Poll schien mir etwas zu kompliziert um die Mechanik zu verstehen (Anfänger ...).

+0

Meinst du etwas wie [Benachrichtigung] (https://vaadin.com/docs/-/part/framework/application/application-notifications.html) oder [PopupView] (https://vaadin.com/docs /-/part/framework/components/components-popupview.html)? –

+0

Entweder Sie verwenden Push/Poll-Techniken oder Sie müssen Ihre brandneue Komponente in GWT schreiben. Es ist deine Entscheidung. – kukis

+0

ok @kukis, das scheint die Antwort zu sein: Es gibt keine andere Option als push/poll. – candela

Antwort

2

TLDR: Entweder Sie verwenden Push/Poll-Techniken oder Sie müssen Ihre brandneue Komponente in GWT schreiben. Die Wahl liegt bei Ihnen

Um vollständig zu verstehen, warum müssen Sie wissen, wie Vaadin oder/und Web-Anwendungen arbeiten. Nehmen wir Ihr Beispiel: Sie möchten dem Browser mitteilen, dass er das Fenster nach einiger Zeit (5 Sek.) Schließen soll. Sie können gewünschte Wirkung auf zwei verschiedene Arten erreichen:

  • Verwendung SetTimeout in JavaScript
  • eine Nachricht vom Server an den Browser

SetTimeout in Vaadin senden: natürlich gibt es keine solche Methode in Vaadin, da dieses Framework vorkompilierte GWT-Komponenten verwendet. Sie müssten also entweder eine Komponente in Vaadin addons repo finden oder Ihre eigene schreiben. GWT ist kein JavaScript - das ist richtig, aber Sie können trotzdem Ihre eigene JavaScript-Datei mit jeder GWT-Komponente verbinden.

Senden einer Nachricht vom Server an den Browser bedeutet im Grunde Push/Polling. Es gibt keinen anderen Weg. Vaadin unterstützt tatsächlich beide, also ist das einzige, was Sie brauchen, über sie zu lernen.

Es gibt auch einen Hack, aber ich würde diesen Ansatz nicht empfehlen. Im Allgemeinen können Sie reinen JavaScript-Code zur Laufzeit ausführen mit:

JavaScript.getCurrent().execute("alert('Hello')"); 

Aber sollten Sie diesen Weg gehen, wollen Sie harte Zeit die Verwaltung Ihrer Pop-ups haben seit Vaadin Rahmen wird man nicht erwarten, Fenster zu schließen, dass er verantwortlich ist für .

+0

Danke @kukis für weitere Erklärungen! Also werde ich das Push/Poll-Ding lernen, denke ich. Es ist vielleicht nützlich für andere Dinge. auch. Der JS-Hack ist etwas, das ich definitiv nicht benutzen möchte. – candela

+0

Es ist auch eine gute Praxis auf Stackoverflow zu upvote und zu akzeptieren und zu beantworten, wenn Sie es nützlich finden. – kukis

+0

Ich habe geupdated, aber nicht angezeigt. – candela

0

Nun, da niemand die richtige Antwort gegeben hat, könnte man so etwas wie dies mit einem Timer und ein TimerTask tun:

Window wd = new Window("Your autoclosing window"); 
// do stuff 
Timer delayer = new Timer(); 
retrasador.schedule(new TimerTask(){ 
    @Override 
    public void run() { 
     UI.getCurrent().access(new Runnable() { 
      @Override 
      public void run() { 
       wd.close(); 
      } 
     }); 
    } 
}, 10000); // auto closes after 10 s 

Beachten Sie, dass Sie wahrscheinlich Pflege Ihrer Timer nehmen sollten, wenn Sie fertig sind mit es.