Wie neu erstellen Sie den GWT History-Stack?
-
06-07-2019 - |
Frage
Ich habe eine größere Anwendung, die ich arbeite mit, aber die GWT Geschichte Dokumentation hat ein einfaches Beispiel, das das Problem veranschaulicht. Das Beispiel wird der Einfachheit halber kopiert:
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 beurteilen Sie die Geschichte bewahren, so dass, wenn der Benutzer die Seite aktualisiert wird, ist die Zurück-Taste noch nützlich?
Lösung
Ich habe es getestet mit Firefox und Chrome für meine Anwendung und Aktualisierung der Seite tut nicht die Geschichte löschen. Welchen Browser verwenden Sie? Haben Sie die
<iframe src="javascript:''" id='__gwt_historyFrame' style='position:absolute;width:0;height:0;border:0'></iframe>
in Ihrem HTML?
Andere Tipps
GWT hat für dieses Problem gesorgt, indem das History-Objekt bereitstellt. Durch einen Anruf an, es ist statische Methode History.newItem("your token")
, werden Sie in der Lage sein, einen Token in der Query-String zu übergeben.
Doch Sie müssen sich bewusst sein, dass jedes Mal gibt es eine Geschichte Änderung in einer GWT-Anwendung wird das onValueChange(ValueChangeEvent event){}
Ereignis ausgelöst, und in der Methode können Sie die entsprechenden Seiten aufrufen. Im Folgenden finden Sie eine Liste von Schritten, die ich dieses Problem zu lösen verwenden.
-
einen Klick Zuhörer auf das Objekt hinzufügen, die eine neue Seite nennen muss. Im Umgang mit dem Ereignis ein Token an den
history.(History.newItem("new_token")
hinzuzufügen. -
die
ValueChangeHandler
in der Klasse implementieren, die Ihr Entrypoint implementiert. -
In
onValueChangeHandler(this)
Zuhörer auf die Klasse, die die Entrypoint implementiert. Stellen Sie sicher, dass die Zeile in demonModuleLoad()
Verfahren (es ist wichtig, es in diesem Verfahren zugegeben wird) der Klasse, die die Entrypoint implementiert (ziemlich offensichtlich, ha!) -
implementieren Schließlich
onValueChange(ValueChangeEvent event)
{// Aufruf eine neue Seite} Methode.
Das ist es