J'ai joué pendant un certain temps avec History dans gwt parce que j'ai l'intention de l'implémenter dans mon projet actuel, j'ai donc créé un petit projet de démonstration juste pour voir comment ça marche et m'entrainer. Donc, pour certaines raisons, cela ne fonctionne pas. Voici le code - très simple en arrière et en avant.Historique GWT demo - ne fonctionne pas
ici est le iframe
<iframe id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>
alors le point d'entrée
public class EntryPoint implements com.google.gwt.core.client.EntryPoint {
private FirstPanel panel;
public void onModuleLoad() {
ContentPanel panel = ContentPanel.getInstance();
panel.setContent(FirstPanel.getInstance());
RootPanel.get().add(panel);
}
}
et 3 formes uniques, où le contenu forme sont chargés et 2 forment.
public class ContentPanel extends Composite
{
private static ContentPanel instance;
private static VerticalPanel panel = new VerticalPanel();
private ContentPanel()
{
initWidget(panel);
}
public void setContent(Widget widget)
{
panel.clear();
panel.add(widget);
}
public static ContentPanel getInstance()
{
if(instance == null)
return instance = new ContentPanel();
else
return instance;
}
}
et ..
public class FirstPanel extends Composite implements HistoryListener {
private static FirstPanel instance;
private VerticalPanel panel;
public FirstPanel() {
History.addHistoryListener(this);
panel = new VerticalPanel();
panel.setStyleName("panelstyle");
Button button2 = new Button("Next page");
button2.addClickHandler(new ClickHandler()
{
public void onClick(ClickEvent event)
{
History.newItem("second_page");
}
});
panel.add(button2);
initWidget(panel);
}
public static FirstPanel getInstance()
{
if(instance == null)
return instance = new FirstPanel();
else
return instance;
}
public Widget getWidget() {
return panel;
}
public void onHistoryChanged(String historyToken) {
if(historyToken.equalsIgnoreCase("second_page"))
ContentPanel.getInstance().setContent(SecondPanel.getInstance());
}
}
et last but not least :))
public class SecondPanel extends Composite implements HistoryListener
{
private static SecondPanel instance;
public SecondPanel()
{
History.addHistoryListener(this);
VerticalPanel verticalPanel = new VerticalPanel();
TextBox firstnameBox = new TextBox();
TextBox lastnameBox = new TextBox();
Button submitButton = new Button("Click");
verticalPanel.add(firstnameBox);
verticalPanel.add(lastnameBox);
verticalPanel.add(submitButton);
submitButton.addClickHandler(new ClickHandler()
{
public void onClick(ClickEvent event)
{
History.newItem("first_panel");
alert("You are in second panel");
}
});
initWidget(verticalPanel);
}
public static SecondPanel getInstance()
{
if(instance == null)
return instance = new SecondPanel();
else
return instance;
}
public void onHistoryChanged(String historyToken)
{
if(historyToken.equalsIgnoreCase("first_panel"))
ContentPanel.getInstance().setContent(FirstPanel.getInstance());
}
}
Le problème est que je clique sur le bouton dans FirstPanel et SecandPanel est chargé puis appuyez sur " Retour "dans le navigateur ne fait rien. Dans la méthode onHistoryChanged le param historyToken est une chaîne vide, ne devrait pas être une valeur de la pile (first_page)?
Je serai reconnaissant si quelqu'un trouve le problème ou m'explique où je fais des erreurs.
Merci
Merci Peter, vous avez raison.Il fonctionne! – adgfs
Vous voulez avoir un seul auditeur sur un panneau de haut niveau, n'est-ce pas? – adgfs
Oui, cela rendrait le code plus lisible. –