我有一些状态页面,每个页面都有一些状态。例如,每个页面都有一个已提交的表单。
如何组织一个菜单,其中包含指向这些有状态页面的最新版本的链接?我应该在任何地方(可能在会话中)存储每个页面的适当对象的引用吗?如果我使用
onClick() { setResponsePage(MyPage.class); }
比我丢失了以前的页面状态。我想链接到页面的最后状态。
答案 0 :(得分:1)
每次呈现页面时,都会在会话中存储页面的ID。
int pageId = pageInstance.getPageId();
列表或堆栈数据结构可用于保存标识符。
您可以使用转发器(RepeatingView等)实现导航菜单,该转发器为会话中的每个页面ID创建新链接。
在链接的点击处理程序中,您可以按如下方式重定向用户:
Page pageInstance = (Page) new PageProvider(pageId, null).getPageInstance();
setResponsePage(pageInstance);
答案 1 :(得分: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 :(得分: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);
}
}
});
}
}
它会阻止创建新的页面实例并保留用户制作的所有页面状态。