2011-06-29 73 views
1

我有以下问题。这是我在用户登录应用程序并注册历史记录时遇到的情况。 工作流程如下: 1.检查用户是否已经登录 - 意味着如果用户对象在会话中 如果没有,则登录表单被加载并添加新的令牌(History.newItem(“login”)) 如果是,那么用户可以自由地在应用程序中输入主窗体并添加一个标记(History.newItem(“main”))。 用户输入pass和user成功后,会添加一个新的令牌(History.newItem(main))并输入应用程序主窗体。GWT历史登录问题

问题出在主窗体显示后,用户决定在浏览器中单击“返回”,然后从堆栈中取出“登录”令牌并加载登录表单。但假设用户决定点击“转发”浏览器按钮,然后取得“主”令牌并显示主窗体。我不喜欢这种情况,想做:在“返回”按钮后出现一个对话框,并要求“离开应用程序?”与“是”和“否”按钮,但我无法确定何时我经常登录或“后退/前进”登录为了做一些行动。

任何意见或办法..可能是我的设计是错误..

任何办法区分后退或前进动作?

回答

4

如果你想避免这一切,那么不要把“登录”的历史。

在这种情况下,您可能希望将登录面板实现为模态对话框。因此,当用户(或应用程序)请求登录时,会显示一个模式对话框,其中包含登录输入字段。完成登录后,只需关闭对话框并重新加载当前页面(以反映受登录影响的更改)。

您可以使用'History.fireCurrentHistoryState()'强制重新加载当前页面。这会调用您的历史记录处理程序,但不会影响历史记录(不会将记号添加到历史记录堆栈中)。

+0

感谢彼得,一如既往地为您提供了一个很好的解决方案。 :) – adgfs

+0

彼得,我还有一个问题。用户点击“注销”后应该是什么行为,让我们假设用户是主要形式,并希望离开应用程序,因此点击“注销”从会话中删除用户对象并加载登录表单,但点击浏览器中的“返回”保持“主要”标志......我该如何处理这种情况?历史记录从成功登录后加载的主窗体开始。 – adgfs

+0

对于需要用户进行认证的每个页面(即令牌),您都会显示该对话框,并在完成后进入页面。因此,在通过决策树并显示页面内容之前,请在您的历史记录处理程序中进行身份验证检查。 –