2012-09-17 292 views
1

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

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

它并没有真正存储有关当前位于堆栈顶部的令牌以外的任何其他状态信息。这意味着我会期望得到像弹出的令牌这是我们刚刚离开的信息&也可能获得信息无论是后退还是前进被按下。

基本机制假定页面没有“高级”状态,即如果当前的标记是'菜单',那么我们来自这个菜单页面的位置并不重要。不过,我想检查一下,我们现在是否要离开一个特定的页面,因为如果我们这样做,我想先显示一个警告来保存数据。

此外,我的一些页面没有使用默认构造函数,而是从当前显示的页面获取特定信息。这可以防止我创建一个集中的地方,所有页面都被创建,应用程序中的所有按钮都只是在使用历史令牌。 (如第37页的here所示。)

无论如何,我在这里相当迷茫。我不确定要采取什么样的路径才能在不重写我的应用程序的情况下获得对后退/前进的基本支持。

任何想法或想法?

回答

1

如果你需要跟踪是你从哪里来,你可以轻松地做自己:这是因为存储在全局状态标记,只更新它,你在新的一个付诸行动之后容易。

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

我并不是建议你采用PlaceController而不是原始的History(即使我确信你不会后悔的话),只是指出这是可能的。

又见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

0

令牌机制是基本的,但没有什么能阻止你构建一个复杂的标记来表示附加的状态,并分析它以后检索状态。当然,它受浏览器支持的令牌或URL大小的限制,但您仍然可以使用它。你说得对,它并没有为面包屑和历史追踪等更复杂的事物提供很多支持。这需要一些编码来实现这些。

+0

你可以编码你的痕迹在你的道理,如果你希望(我猜你不会需要超过4-5级)。 –

1

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

如果我有可能有未保存的数据的视图,我始终贯彻我从mayStop()调用来警告用户,如果任何更改可能会丢失一个hasChanges()方法。

请注意,你可以让你的令牌越具体需要。该令牌可能包含有关您所需页面的任何信息,因此您可以对其进行解析并采取行动。喜欢的东西:

myPage.jsp /#日历:CLASSID = 900 &选项=教师&菜单项=月

您可以轻松地一前一页面添加到您的令牌,如果你需要它。

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