不使用操作链在目标操作中设置实例成员值?

时间:2013-03-01 14:15:37

标签: java struts2

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

JSP --->措施1&--- GT;措施2&--- GT; ResultJsp

通过动作链接,我的理解是请求从action1转发到action2.So如果我将一些参数从action1传递给action2 它应该在新的动作实例变量中设置(/为新动作创建的值栈)。但它没有发生

以下是我在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的布尔属性。但我得到的价值是假的,虽然我应该得到它 因为我将它作为结果注释中的属性传递。正如我在行动链中的理解,所有请求参数都是 从action1转发到action2。基本上为action2创建了新的值栈,其中包含存在的变量 在行动1。那么为什么没有为action 2中的empMode属性设置值true?

2 个答案:

答案 0 :(得分: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

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

换句话说,将所需的属性添加到操作和链中将执行您需要的操作,因为链结果没有设施来处理“命名空间”和“操作”之外的属性。

答案 1 :(得分:0)

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

  1. 在两个操作中都有相应的getter / setter方法。例如:如果要将'empMode'参数从Action1传递给Action2。两个动作都有getEmpMode()/ setEmpMode()方法。

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