2016-04-04 11 views
2

Ich entwickle RIA-Anwendung mit Vaadin CDI-Addon. Über die App: Es hat zwei Ansichten (viewA und viewB), die von Navigator verwaltet werden. Benutzer Geschichte ist ziemlich einfach:Vermeiden Sie die Zurück-Taste mit vaadin

  1. Benutzer gibt ViewA
  2. einige Unternehmen Perform Sachen
  3. zu ViewB Leitet
  4. Adressleiste mit einigen externen Website gehen
  5. (ex google.com.) Drücken Sie zurück und es geht auf die neueste Seite, was er sah (viewB), anstelle von viewA

Alle Vorschläge/Tipps-N-Tricks wie Vermeiden Sie die Umleitung zu viewB, aber umleiten zu viewA?

Vaadin Forum ruhig über diese Sache.

Danke

+0

Haben Sie ['@ PreserveOnRefresh'] (https://vaadin.com/api/7.6.4/com/vaadin/annotations/PreserveOnRefresh.html) auf Ihrer UI verwendet, um [eine Anwendung zu erstellen, die ihren Status beibehält aktualisieren] (https://vaadin.com/wiki/-/wiki/Main/Creating+an+application+das+erhältst+auf+refresh), oder in Ihrem speziellen Fall _when going back_? – Morfic

+0

Ja. Ich benutze es, aber hier ist ein Problem beim Aktualisieren von viewB es wird automatisch zu viewA weitergeleitet (was nicht gut ist). Ich muss es beibehalten, wenn ich die Taste zurückdrücke ODER die App verlasse (einfach nur die Sitzung schließen?) Kann @PreserveOnRefresh für bestimmte Ansichten angegeben werden? – Reborn

+0

'@ PreserveOnRefresh' kann nur für UI-Klassen verwendet werden und gilt für die gesamte Anwendung. In diesem Fall müssen wir Code sehen, da das Problem zum Beispiel in einem Ihrer Listener liegt. Es wäre schön, wenn Sie eine [SSCCE] teilen könnten (https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjVmtij7vrLahVDiiwKHdYxCxsQFggbMAA&url=http%3A%2F % 2Fsscce.org% 2F & usg = AFQjCNFdqWH-Hxu7Vlsk6vBvl9vWtnAdrw & sig2 = Kss9vXpIN_tFijEfvhg2bQ). Wenn Sie auf Kommentare antworten, verwenden Sie bitte '@ Benutzername', damit sie benachrichtigt werden. – Morfic

Antwort

1

Sie View.enter(...) in Ihrem ViewB außer Kraft setzen könnten, und nach Ihrem Anwendungszustand, aktualisieren Sie Ihre Ansicht URI Page.getCurrent().setUriFragment(recentUrl, false);

+0

Guter Vorschlag, 'Enter' Methode zu verwenden, aber es hat mich auf den richtigen Weg gebracht. 1) Verwenden Sie 'VaadinSession.getCurrent(). GetAttribute()' zum Vergleich - wenn das gleich ist, dann redirect. 2) [navigator usage] Wenn Sie navigator verwenden, ist es einfacher, 1 zu kombinieren und eine eigene Klasse zu schreiben, die von ViewChangeListener ausgeht. FYI: beide Optionen erfordern '@ PreserveOnRefresh', da wir VaadinSession verwenden Einfach zu implementieren - zuerst, aber nicht so sicher (erfordert viele Tests) als zweite (zuverlässige) – Reborn

2

ich gleiches Problem hatte, aber aufgelöst folgenden Code:

getUI().getNavigator().addViewChangeListener(new ViewChangeListener() { 
       public boolean beforeViewChange(ViewChangeEvent event) { 
        return changeView; 
       } 

       @Override 
       public void afterViewChange(ViewChangeEvent event) { 
        // TODO Auto-generated method stub 

       }}); 

Stellen Sie changeView = true nur durch richtige Navigation ein (z. B .: On click clicks).

Dies ist, wie Sie Navigation mithilfe der Browser-Schaltfläche zurück vermeiden können. In diesem Fall ändert sich die Ansicht nicht, wenn der Benutzer eine der Browserschaltflächen verwendet, und er bleibt auf derselben Seite.

+0

ja, genau wie ich dachte. Aber hier ist das Ding ... sobald Sie von viewA zu viewB navigieren und dann zurück drücken, sehen Sie immer noch viewB (was in meinem Fall nicht korrekt ist) Die Workaround wird Vaadinsession für einen bestimmten Wert nach der Navigation zurück überprüfen. – Reborn

+0

Wenn Sie meine Idee haben, habe ich bereits hier http://stackoverflow.com/questions/40781806/how-to-override-vaadin-navigator-properly und endgültige Lösung ist nicht perfekt, aber ich schaffte es zu arbeiten – Reborn

Verwandte Themen