1

这是我正在使用动作链接的 struts 2 流程

JSP--->Action1--->Action2--->ResultJsp

使用动作链接,我的理解是请求从动作1转发到动作2。因此,如果我将一些参数从动作1传递到动作2,它应该设置在新动作实例变量(/为新动作创建的值堆栈)中。但它没有发生

下面是我在action1中的代码

@Result(name = "displayEmployee",type = "chain",
        params = {
            "namespace", "/employee",
            "actionName", "Employee-lookup!search",
            "empMode", "true"

        })


@Action("display-employee!displayEmployee")
  public String displayEmployee() {
    return "displayEmployee";
  }

现在在 Action 2 即 display-employee 中,我有名为 empMode 的布尔属性。但是我得到的值是假的,虽然我应该得到它是真的,因为我在结果注释中将它作为属性传递。正如我对动作链接的理解,所有请求参数都从动作1转发到动作2。基本上,为 action2 创建了新的值堆栈,其中包含 action1 中存在的变量。那么为什么在动作 2 中没有为 empMode 属性设置值 true 呢?

4

2 回答 2

2

我不认为你可以这样做,没有提到能够使用链结果类型传递额外的参数:http: //struts.apache.org/release/2.3.x/docs/action-chaining.html

结果是类型链......所以它需要解释和处理你的参数,因为之后一个新的动作开始了。但是链没有这个设施(查看源代码): http: //grepcode.com/file/repo1.maven.org/maven2/org.apache.struts.xwork/xwork-core/2.3.1.1/com/ opensymphony/xwork2/ActionChainResult.java

如果这是一个正常的重定向,你可以像你一样将这些参数添加到请求中。

换句话说,将所需的属性添加到动作和链将做你需要它,因为链结果没有设施来处理除“命名空间”和“动作”之外的属性。

于 2013-03-01T18:57:16.703 回答
0

如果您别无选择,只能使用动作链接并且需要将参数从一个传递到另一个,请尝试以下任一方法

  1. 在这两个操作中都有相应的 getter/setter 方法。例如:如果您想将“empMode”参数从 Action1 传递到 Action2。在这两个操作中都有 getEmpMode()/setEmpMode() 方法。

  2. 将参数添加到要传递给操作上下文中的参数映射的参数。您可以使用 ActionContext.getContext().getParameters() 访问参数映射。将要传递给 Action2 的新参数从 Action1 添加到此映射。如果 Action2 具有新参数的相应 getter/setter,并且假设在堆栈中配置了“params”拦截器,则 Action2 将被正确填充。

于 2013-03-02T08:16:11.197 回答