2013-08-28 5 views
5

У меня есть несколько страниц с сохранением состояния с некоторым состоянием для каждой страницы. Например, каждая страница имеет форму, которая была отправлена.Ссылка на последнюю версию страницы состояния

Как я могу организовать меню со ссылками на последние версии этих страниц с сохранением состояния? Должен ли я хранить в любом месте (может быть в сеансе) ссылку на соответствующий объект для каждой страницы? Если я использую

onClick() { setResponsePage(MyPage.class); } 

, чем я потерял предыдущее состояние страницы. Я хочу связать с последним состоянием страницы.

ответ

1

Каждый раз, когда страница отображается, хранится идентификатор страницы в сеансе.

int pageId = pageInstance.getPageId(); 

Для хранения идентификаторов может использоваться структура данных списка или стека.

Вы можете реализовать меню навигации с помощью ретранслятора (RepeatingView или такого), который создает новую ссылку для каждого идентификатора страницы в сеансе.

В обработчик щелчка по ссылке в вы можете перенаправить пользователя следующим образом:

Page pageInstance = (Page) new PageProvider(pageId, null).getPageInstance(); 
setResponsePage(pageInstance); 
0
pageId = this.getPageId(); // get current version of lets say a HomePage 


//OnClick for Link 
public void onClick() 
     { 
     WebPage homePageInstance = 
      (WebPage) new PageProvider(HomePage.pageId, null).getPageInstance(); 
     setResponsePage(homePageInstance); 
     } 
    }); 
+2

код нет сам пояснительный. Пожалуйста, добавьте в свой код некоторое объяснение, которое автор вопроса поймет, что ваш код пытается решить. – rajuGT

0

Я делаю это передавая int previousId параметр с помощью конструктора:

@MountPath(value = "editSomethingPage") 
public class TestPage extends WebPage { 

int previousPageId = 0; 

public TestPage(int previousPage) { 
    super(); 
    this.previousPageId = previousPage; 
} 

@Override 
protected void onInitialize() { 
    super.onInitialize(); 
    add(new Link("goBack") { 
     @Override 
     public void onClick() { 
      if (previousPageId != 0) { 
       setResponsePage((Page) AuthenticatedWebSession.get().getPageManager().getPage(previousPageId)); 
      } else { 
       setResponsePage(PreviousPage.class); 
      } 
     } 
    }); 
    } 
} 

Это предотвращает создание нового экземпляра страницы и сохраняет все состояния страницы, сделанные пользователем.