这是我使用动作链的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?
答案 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)
如果您没有其他选择,只能使用动作链并需要将参数从一个传递到另一个,请尝试以下任一方法
在两个操作中都有相应的getter / setter方法。例如:如果要将'empMode'参数从Action1传递给Action2。两个动作都有getEmpMode()/ setEmpMode()方法。
将要添加的参数添加到操作上下文中的参数映射。您可以使用ActionContext.getContext()。getParameters()访问参数映射。从Action1将要传递给Action2的新参数添加到此映射。如果Action2具有相应的新参数的getter / setter,并且假设在堆栈中配置了'params'拦截器,Action2将被正确填充。