最佳实践:如何处理浏览器和网站导航的并发
对于每个Web开发人员来说,这都是一个众所周知的问题。就我试图为该问题找到一个好的解决方案而言,没有任何解决方案(或者至少我找不到它)。
让我们假设以下内容:
用户没有表现出预期的行为。我正在从事的实际项目使用Web门户中的导航。但是,如果用户使用浏览器的"后退"按钮,整个事情就变成了jeoprady [?],并且结果并非总是可预测的。
我们使用了struts框架,并在某些地方将反向URL存储到表单中,在这些地方我们需要使用反向URL,该反向URL已从此表单的反向URL中呈现出来。因为只有一个单一字段可用于此信息,因此无法返回多个步骤。
当我们更改" struts-flow"(可能会导致使用其他格式)时,此信息将丢失。
如果用户敢于在Web应用程序中的某个地方放置书签,则可能永远不会设置此信息,并且结果将再次变得不可预测或者不够灵活!
我的"解决方案":
我将用户访问的每个与导航相关的页面存储到会话中的类似堆栈的存储中。这意味着将收集并存储一个导航路径,以用于以后的导航。
在涉及反向导航的webapp的任何页面中,我使用了一个自制标签,该标签将堆栈内容呈现到url中。
就是这样。
单击此反向URL时,堆栈已被用户单击的反向URL内容填充(一旦呈现反向链接,该内容将保留来自堆栈的所有信息)。
这很清楚,因为单击链接是一个清晰的状态,Web开发人员确切知道该位置,此时用户"是"绝对独立于用户之前所做的任何操作(例如,多次单击浏览器后退按钮) )。然后,导航堆栈将基于此新状态构建。
简历:
显然,这不是最佳解决方案。但是,它允许在堆栈上存储其他信息,例如页面参数和一些其他有用的东西(可能会进一步开发)。
那么,我们对这个问题有什么解决方案?
干杯,
法力值
解决方案
回答
堆栈解决方案听起来很有趣,但是如果用户选择在不同的选项卡上或者使用书签"并行"导航,它可能会中断。
恐怕我不太了解我们为什么必须为每个用户保留所有这些状态:理想情况下,Web应该遵循REST原理并且完全无状态。因此,单个URL应该标识单个资源,而不必保留每个用户的导航历史记录。
如果Web应用程序严重依赖AJAX,则可以尝试实现类似GMail的方法(公认的,不是那么容易...),其中界面的每次更改都反映在页面URL的更改中。因此,每个页面都由当前URL标识,并且用户可以像往常一样同时导航或者使用"后退"按钮。