GWT历史机制

时间:2012-09-17 23:39:34

标签: gwt history gwt-history

我正在尝试将历史记录功能添加到我的GWT应用程序中。

据我了解,GWT提供的基本历史支持确实是基本的......或者我应该说非常基本。

除了当前位于堆栈顶部的令牌之外,它并不真正存储有关状态的任何其他信息。意思是我希望获得像弹出的令牌这样的信息,这是我们刚刚离开的那个。也许可以获得关于后退还是前锋被按下的信息。

基本机制假设页面没有“高级”状态,即如果当前令牌是“菜单”,那么我们从哪里来到这个菜单页面并不重要。但是,我想检查一下我们是否正在离开特定页面,因为如果我们这样做,那么我想首先显示保存数据的警告。

此外,我的一些页面不使用默认构造函数,而是从当前显示的页面获取特定信息。这使我无法拥有一个集中的位置,在该位置创建所有页面,并且应用程序中的所有按钮都只是使用历史记录标记。 (如第37页的建议here所示。)

无论如何,我在这里很丢失。我不知道如何在不重写我的应用程序的情况下为后退/前进提供基本支持。

任何想法或想法?

3 个答案:

答案 0 :(得分:1)

我假设您熟悉GWT活动和地点设计模式。它提供了您需要的所有机制,即活动中的标记和mayStop()方法。

如果我有一个可能有未保存数据的视图,我总是实现一个hasChanges()方法,我从mayStop()调用该方法来警告用户是否有任何更改可能会丢失。

请注意,您可以根据需要制作令牌。令牌可能包含有关您需要的页面的任何信息,因此您可以解析它并对其进行操作。类似的东西:

myPage.jsp /#CALENDAR:CLASSID = 900安培;选项=教师&安培;菜单项=月

如果需要,您可以轻松地将上一页添加到令牌中。

活动&地方模式给了我所需的一切,我不必担心历史管理 - 我让浏览器去做。

答案 1 :(得分:1)

如果你需要跟踪你来自哪里,你可以轻松地自己做:它就像将令牌存储在全局状态一样简单,并且只有在你操作新的状态后才更新它。

仅供参考,PlaceController就是这样(使用Place抽象而不是基于字符串的标记)。它还会触发PlaceChangeRequestEvent setMessage,您可以PlaceChangeEvent在实际移动之前要求用户进行确认(PlaceController)。

我不是建议您转而使用History而不是原始{{1}}(即使我确定您不会后悔),只是指出这是可能的。

另请参阅How do I determine whether I am going "forward" or "backward" through my History in GWT?GWT 2.1 Place/Activity technique glitch: URL changes before navigation is confirmed

答案 2 :(得分:0)

令牌机制是基本的,但没有什么能阻止您构建复杂令牌来表示其他状态并解析它以便稍后检索该状态。当然,它受到浏览器支持的令牌或URL的大小的限制,但您仍然可以使用它做很多事情。你是对的,它不会为像面包屑和历史跟踪等更复杂的东西提供太多支持。它需要一些编码才能实现这些。