【问题标题】:A pattern for stack of urls用于堆栈 url 的模式
【发布时间】:2012-07-02 08:22:29
【问题描述】:

我有以下问题。我们有一个应用程序,它基本上是一组控制与用户交互的 JSP 和操作类。这些操作设置了页面正确显示所需的一些参数。系统中的 url 总是包含事件的名称,它定义了我们应该下一步去哪个页面。

现在,几乎每个页面都有一个取消按钮,该按钮应该指向上一页。从一开始,每个取消按钮的 url 都是严格定义的,但最终,随着系统变得越来越大,为这个按钮编写逻辑以使其准确地指向上一页变得非常困难。

例如,假设我们有三个页面,A、B 和 C。页面 A 有一个指向页面 B 的链接,而 B 有一个指向 C 的链接。因此 C 有一个甚至指向 B 的 url(以及它包含要在 B) 上显示的实体的键。但是,假设页面 A 被修改,现在在 C 上也有一个链接。现在我们需要检查从那里来的 C 页面并适当地设置 URL,逻辑变得很复杂。

因此,我向我的团队提出了以下解决方案。用户会话应该包含一个称为 CancelStack 的特殊对象。导致页面的每个操作都应将其 url 推入堆栈(包含事件和一些所需的附加数据)。在每个页面上,取消按钮现在应该有一个指向特殊事件的 url,称为 cancelStack。

cancelStack 动作的作用是:

  • 从会话中检索取消堆栈。
  • 弹出最后一个网址,不要使用它。
  • 再次弹出该网址并重定向到该网址。

为什么我们不使用就检索最后一个 url?假设我们有页面 A 和 B,A 通向 B。A 的操作将其 url 放在堆栈中,这应该是 B 页面的取消 url。现在,B 的操作将它的 url 放在堆栈中。因此我没有使用就弹出它,然后弹出第一个url,重定向到A动作,这个动作再次将A url添加到堆栈中(因此堆栈大小仅减少1,而不是2)。

这似乎是一个很好的方案,但是堆栈的顶部元素在没有使用的情况下弹出似乎很奇怪。因此我有一个问题。是否有任何设计模式可以在会话中存储 URL 序列以便正确组织取消按钮?

【问题讨论】:

  • 这听起来很像许多网站中使用的“面包屑”系统。还是我误读了你的解释?
  • 不,我们在这里不完全使用面包屑导航,尽管想法几乎相同 - 我们需要跟踪我们之前访问过的页面

标签: java jsp design-patterns servlets action


【解决方案1】:

你的所作所为在我看来是合理的。老实说,我现在想不出解决您的问题的设计模式,但我认为如果除了cancelStack 之外,您还保留对currentURL 的引用,以便您将currentURL 推送到堆栈只有当您不要以取消页面结束,您将摆脱让您烦恼的额外pop
否则你只需pop 顶部的cancelStack
例如。在你的例子中:

假设我们有页面 A 和 B,A 通向 B...

currentUrl 是 A。A 的操作不会取消,因此 currentUrlA 被推送到 cancelStack。然后是BcurrentURL 的操作是B 但操作是取消所以B 没有放在堆栈中。所以cancelStack 的顶部是A(而currentUrlB)。所以如果你pop cancelStack 你检索A(不需要额外的pop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 2016-04-17
    • 1970-01-01
    • 2023-03-11
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多