2009-06-19 6 views
0

Ich habe eine größere Anwendung, mit der ich arbeite, aber die GWT History documentation hat ein einfaches Beispiel, das das Problem demonstriert. Das Beispiel wird der Einfachheit halber kopiert:Wie erstellt man den GWT History Stack neu?

public class HistoryTest implements EntryPoint, ValueChangeHandler 
{ 
    private Label lbl = new Label(); 

    public void onModuleLoad() 
    { 
     Hyperlink link0 = new Hyperlink("link to foo", "foo"); 
     Hyperlink link1 = new Hyperlink("link to bar", "bar"); 
     Hyperlink link2 = new Hyperlink("link to baz", "baz"); 

     String initToken = History.getToken(); 

     if (initToken.length() == 0) 
     { 
      History.newItem("baz"); 
     } 

     // Add widgets to the root panel. 
     VerticalPanel panel = new VerticalPanel(); 
     panel.add(lbl); 
     panel.add(link0); 
     panel.add(link1); 
     panel.add(link2); 
     RootPanel.get().add(panel); 

     History.addValueChangeHandler(this);  // Add history listener 
     History.fireCurrentHistoryState(); 
    } 

    @Override 
    public void onValueChange(ValueChangeEvent event) 
    { 
     lbl.setText("The current history token is: " + event.getValue()); 
    } 
} 

Das Problem ist, dass, wenn Sie die Anwendung aktualisieren, wird die Geschichte Stapel weggeblasen. Wie bewahrt man den Verlauf auf, so dass, wenn der Benutzer die Seite aktualisiert, der Zurück-Knopf immer noch nützlich ist?

Antwort

2

Ich habe es gerade mit Firefox und Chrome für meine Anwendung und Seitenaktualisierung getestet nicht löschen Sie die Geschichte. Welchen Browser benutzen Sie? Haben Sie die

<iframe src="javascript:''" id='__gwt_historyFrame' style='position:absolute;width:0;height:0;border:0'></iframe> 

in Ihrem HTML?

+0

Ja, die Geschichte Rahmen an Ort und Stelle war. Es stellt sich heraus, dass dies kein technisches Problem unter meiner Kontrolle ist und ich fühle mich jetzt ziemlich albern zu fragen. Ein paar Dinge waren im Spiel. Zuerst verliert der GWT Browser den Verlauf beim Refresh (manchmal vergesse ich zu kompilieren). Zweitens verhält sich IE seltsam in Bezug auf die Geschichte. Drittens haben einige Entwickler nicht richtig Geschichtsmarker auf den Stapel geschoben. Vielen Dank für einen Blick auf das für mich, Entschuldigung für den Ärger. – Michael

1

GWT hat dieses Problem durch Bereitstellung des History-Objekts behoben. Wenn Sie die statische Methode History.newItem("your token") aufrufen, können Sie ein Token in Ihre Abfragezeichenfolge eingeben.

Sie müssen jedoch beachten, dass jedes Mal, wenn in einer gwt-Anwendung eine Protokolländerung auftritt, das Ereignis onValueChange(ValueChangeEvent event){} ausgelöst wird und Sie die entsprechenden Seiten aufrufen können. Im Folgenden finden Sie eine Liste der Schritte, die ich zur Lösung dieses Problems verwende.

  1. Fügen Sie dem Objekt einen Klick-Listener hinzu, der auch eine neue Seite aufrufen muss. Wenn Sie das Ereignis bearbeiten, fügen Sie ein Token zur history.(History.newItem("new_token") hinzu.

  2. Implementieren Sie die ValueChangeHandler in der Klasse, die Ihren EntryPoint implementiert.

  3. Fügen Sie onValueChangeHandler(this) Listener zu der Klasse hinzu, die den EntryPoint implementiert. Stellen Sie sicher, dass die Leitung in der onModuleLoad() Methode hinzufügen (es ist wichtig, es hinzugefügt wird in diesem Verfahren) der Klasse, die die Entrypoint implementiert (ziemlich offensichtlich, ha!)

  4. Schließlich onValueChange(ValueChangeEvent event) implementieren {// Aufruf eine neue Seite} Methode.

Das ist es