2009-06-19 2 views
0

У меня есть большое приложение, с которым я работаю, но у GWT History documentation есть простой пример, демонстрирующий проблему. Пример копируется для удобства:Как вы восстанавливаете стек истории GWT?

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()); 
    } 
} 

Проблема заключается в том, что если вы обновите приложение, стек истории получает сдувается. Как сохранить историю, чтобы, если пользователь обновляет страницу, кнопка «Назад» по-прежнему полезна?

ответ

2

Я только что протестировал его с Firefox и Chrome для моего приложения и обновил страницу не очистить историю. Какой браузер вы используете? У вас есть

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

в вашем HTML?

+0

Да, история рама была на месте. Оказывается, это не технический вопрос под моим контролем, и теперь я чувствую себя довольно глупо, чтобы спросить. Несколько вещей были в игре. Во-первых, браузер GWT теряет историю при обновлении (иногда я забываю скомпилировать). Во-вторых, IE действует странно в отношении истории. В-третьих, несколько разработчиков не выбрасывали токены истории в стек. Спасибо, что посмотрели на это для меня, извините за неприятности. – Michael

1

GWT удовлетворил эту проблему, предоставив объект History. Выбрав его статический метод History.newItem("your token"), вы сможете передать токен в строку запроса.

Однако вам необходимо знать, что в любое время, когда в приложении gwt происходит изменение истории, происходит событие onValueChange(ValueChangeEvent event){}, а в методе вы можете вызвать соответствующие страницы. Ниже приведен список шагов, которые я использую для решения этой проблемы.

  1. Добавить прослушиватель кликов к объекту, который также требует вызова новой страницы. При обработке события добавьте токен к history.(History.newItem("new_token").

  2. Внесите ValueChangeHandler в класс, который реализует ваш EntryPoint.

  3. Добавить onValueChangeHandler(this) прослушиватель класса, который реализует EntryPoint. Убедитесь в том, что линия добавить в методе onModuleLoad() (это важно добавляются в этом методе) класса, который реализует EntryPoint (довольно очевидно, ха!)

  4. Наконец реализовать onValueChange(ValueChangeEvent event) {// вызывает новая страница} метод.

Вот это