5

我有许多有状态的页面,每个页面都有一些状态。例如,每个页面都有一个已提交的表单。

如何组织带有指向这些有状态页面的最新版本的链接的菜单?我应该在任何地方(可能在会话中)存储对每个页面的适当对象的引用吗?如果我使用

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

比我失去页面的先前状态。我想链接到页面的最后状态。

4

3 回答 3

1

每次呈现页面时,将页面的 id 存储在会话中。

int pageId = pageInstance.getPageId();

可以使用列表或堆栈数据结构来保存标识符。

您可以使用中继器(RepeatingView 等)实现导航菜单,该中继器为会话中的每个页面 ID 创建一个新链接。

在链接的点击处理程序中,您可以按如下方式重定向用户:

Page pageInstance = (Page) new PageProvider(pageId, null).getPageInstance();
setResponsePage(pageInstance);
于 2013-08-31T09:07:58.593 回答
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);
            }
        }
    });
  }
}

它防止创建新页面实例并保留用户创建的所有页面状态。

于 2016-04-05T08:49:29.403 回答
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);
      }
    });
于 2015-10-23T18:10:50.390 回答