【问题标题】:How to apply a global dynamic result path prefix in Struts 2?如何在 Struts 2 中应用全局动态结果路径前缀?
【发布时间】:2013-05-07 13:59:51
【问题描述】:

我有一个使用 Struts2 作为 MVC 框架的网站。我需要重新设计 JSP。我需要让旧的 JSP 与新的 JSP 一起可访问。所以我添加了一个/newdesign/的根文件夹并将所有现有的JSP文件夹复制到其中。

因此,如果我使用名称/值对 ?newdesign=true 登录(例如)我是初始请求,那么我可以:

  1. 将此存储在用户的会话中,然后
  2. 动态地将/newdesign/ 作为全局前缀添加到struts.xml 中的<result> 标记,以确定是否为相关Action 加载新JSP 或旧JSP。

这样开发者可以检查是否所有的旧页面都被重新换皮到一个新页面中。

我怎样才能完成上面的第 2 部分?

我看过使用

struts.convention.result.path = /newdesign

但这不是动态的,如果要向用户显示旧的或新的 JSP,我无法更改它。

【问题讨论】:

    标签: jsp struts2 actionresult wildcard-mapping struts2-namespace


    【解决方案1】:

    如果您知道第 1 部分,那么假设您可以将参数设置为应该重定向到包含与您的参数 newdesign 对应的命名空间的其他包的适当操作的操作。

    动作名称的前缀在 URL 中用于指定命名空间以分隔包中的动作。因此,newdesign 将通过不同的命名空间进入单独的模块。

    现在您有两个模块,它们具有相同的操作名称和结果,但位置不同,具体取决于命名空间。您应该在具有自己命名空间的不同包中配置它们。有一个example 可以让您更好地理解命名空间的概念。

    为了简化您的包配置,您可以通过wildcard mappings 使用命名空间中的参数。

    【讨论】:

    • 非常感谢您的快速回复...我有大约 40 个操作,总共有大约 100 个 标签,所以我不想复制 struts 配置,因为我也在合并来自正在更新原始操作的开发人员。我只需要重新设置 JSP 的皮肤,因此只需将它们的路径更改为基于会话的“/newdesign/jsp/admin/login.jsp”(而不是“/jsp/admin/login.jdp”)多变的。因此,额外的命名空间和单独的操作不是首选解决方案。你知道我可以全局添加这样一个“结果”前缀的方法吗?
    • 我找到了一种通过 EL 将变量添加到 标记中的方法 - mycodefixes.blogspot.co.il/2010/10/… 但我仍然需要更新任何 在我的 JSP 中!这进一步使我需要同时使用旧皮肤的 JSP 和新皮肤的 JSP 变得更加复杂。所以我放弃了这个想法。非常感谢您的宝贵时间。
    • EL 是一个糟糕的 Strurs2 解决方案,结果可能有动态参数。使用 include 您应该使用也可以参数化的 <s:url 标记。这并不像冰蛋糕那样复杂,但需要让您参与 Struts 的过程。为什么您对通配符解决方案不满意?如果您需要更多解释,您可以查看this 答案并准备挖掘 Struts2 文档。
    猜你喜欢
    • 2015-03-08
    • 2013-01-26
    • 2013-08-25
    • 2013-11-09
    • 2014-03-31
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多