如果我有一个典型的设置,并且带有可转发到JSP的操作,则将请求我的属性,如下所示:
<s:property value="myVariable" />
其中myVariable是操作中的变量。
我想在另一个页面中使用这样的动作标签:
<s:action name="actionName" executeResult="false"> <s:param name="switch">true</s:param> </s:action>
myVariable使用上述动作标签时如何访问?我试过了,<s:property value="myVariable" />但是没有用。
myVariable
在编写时<s:property value="myVariable" />,Struts myVariable在其“值堆栈”中查找属性 。当前操作位于ValueStack中,这就是为什么典型设置有效的原因。现在,在
<s:action name="actionName" executeResult="false"> <s:param name="switch">true</s:param> </s:action> <s:property value="myVariable" />
当执行最后一行时,该actionName动作已经执行,当前动作不是该动作,而是主要(“外部”)动作。如果要访问“内部”操作的属性,则有几种选择,其中两个显示在docs中:
actionName
添加var属性,以便将执行的(内部)操作分配给变量,并使用#语法引用它:
var
<s:action name="actionName" var="innerAction" executeResult="false"> <s:param name="switch">true</s:param> </s:action> <s:property value="#innerAction.myVariable" />
或者,在您的操作方法中,将属性值显式添加到某个范围(例如:attribute)
// in your inner action: ServletActionContext.getRequest().setAttribute("myVariable", "blah blah"); <s:property value="#attr.myVariable" />
免责声明:我尚未对此进行测试