【发布时间】:2012-11-29 14:43:56
【问题描述】:
我在我的 GWT 应用程序中使用 GWTP 并具有以下架构:
LoginPresenter (Presenter)
DashboardPresenter (TabContainerPresenter)
TabbedPresenter1 (Presenter)
TabbedPresenter2 (Presenter)
TabbedPresenter3 (Presenter)
第一次启动我的应用程序时,在 DashboardPresenter 中调用 onBind 和 addTab 方法,当我导航到选项卡时,在该演示者上调用 onbind 方法。
如果我创建一个 PlaceRequest 并通过我的 PlaceManager 导航回 LoginPresenter(通过按注销按钮),我将返回到登录演示者。
问题是,如果我再次登录,那么所有的 onBind 方法都不会被调用,因为它们仍在内存中。 onReset 和 onReveal 被正确调用,但我非常希望每个 Presenter 都被重置,并且每次登录时都会调用 onBind。
如果用户没有足够的权限查看这些选项卡,我决定登录事件哪些选项卡应该对用户可见,并在 DashboardPresenter 的 addTab 方法中限制选项卡。但截至目前,这些选项卡是在用户第一次登录时设置的,但不会在下次登录时设置。这意味着如果具有较少权限的用户在管理员用户之后登录,他可以看到与管理员相同的选项卡。不好!
我应该如何处理这个问题?我非常想在用户注销(导航到登录页面)时“重置”所有演示者或会话。是不是需要“重置”Ginjector,使其不会返回与之前相同的绑定对象?
澄清一下:我们确实有服务器端安全性,它禁止无权访问敏感数据的用户。但是当用户登录时,gwt 应用程序会收到用户可以访问的功能列表。这用于自定义 UI 以适应用户的权限。 (例如,根据用户权限自定义可见选项卡)。
【问题讨论】:
-
我应该补充一点,我目前没有在演示者上使用 unbind 方法,因为我不确定调用这些方法时究竟会发生什么。
-
目前,我的解决方案是使用 Window.Location.reload() 重新加载完整的页面。我不是很喜欢这个,但它确实有效。在注销事件中“重置”我的网络应用程序仍然需要一个好的解决方案......
-
仅供参考,
onUnBind()方法应手动调用,因此它们不适用于您的情况(参见stackoverflow.com/questions/13396992/…)。