0

对于每个 Web 开发人员来说,这是一个众所周知的问题。至于我试图找到解决这个问题的好方法 - 没有(或者至少我找不到)。

让我们假设以下内容:

用户的行为不像他预期的那样。我正在从事的实际项目使用 Web 门户中的导航。但是如果用户使用浏览器的后退按钮,整个事情就会变得危险[?],结果并不总是可以预测的。

我们使用了 struts 框架并将 back-url 存储到表单中——在某些地方,我们需要一个 back-url——这已经从这个表单的 back-url 中呈现出来。因为该信息只有一个字段,因此不可能返回多个步骤。

当您更改“struts-flow”时——这可能会导致使用不同的表单——这些信息将会丢失。

如果用户敢在您的 web 应用程序中的某处放置书签- 此信息可能从未设置过,结果将再次变得不可预测或不够灵活!

我的“解决方案”

我将用户访问的每个导航相关页面存储到类似堆栈的存储中到session中。这意味着收集并存储导航路径以供以后导航。

在 webapp 中涉及反向导航的任何页面上,我使用了一个自制标签,它将堆栈内容呈现到 url 中。

就是这样。当单击此反向 URL 时,堆栈已被用户单击的反向 URL 中的内容填充(一旦呈现反向链接,它将保存堆栈中的所有信息)。

这很清楚,因为单击链接是一个清晰的状态,Web 开发人员确切地知道此时用户“在”哪里 - 绝对独立于用户之前所做的任何事情(例如多次点击浏览器后退按钮次)。然后导航堆栈建立在这个新状态之上。

简历: 很明显,这不是最好的解决方案。但它允许在堆栈上存储额外的信息,如页面参数和其他一些有用的东西(可能的进一步开发)。

那么,您对这个问题的解决方案是什么?

干杯,

法力

4

1 回答 1

1

堆栈解决方案听起来很有趣,但如果用户选择在不同选项卡上“并行”导航或使用书签,它可能会中断。

恐怕我真的不明白为什么你必须为每个用户保留所有这些状态:理想情况下,网络应该遵循REST 原则并且完全无状态。因此,单个 URL 应该标识单个资源,而不必保留每个用户的导航历史记录。

如果您的 Web 应用程序严重依赖 AJAX,您可以尝试实现类似 GMail 的东西(诚然,这并不容易......),其中界面中的每个更改都会反映在页面 URL 的更改中。因此,每个页面都由当前 URL 标识,用户可以同时导航或像往常一样使用后退按钮。

于 2008-09-16T22:13:33.293 回答