值栈
在struts2框架中,MVC的设计模式使得视图层和控制层分离,在这之间传递参数可以使用值栈。值栈就是 OGNL 表达式存取数据的地方。在一个值栈中,封装了一次请求所需要的所有数据,Struts2 会为每个请求创建一个新的值栈,值栈和请求是一一对应的关系,这种一一对应的关系使值栈能够线程安全地为每个请求提供公共的数据存取服务。
使用方法:以下主要是两个方面,其他页面间参数传递可参考之前的博客
action到jsp页面间
首先需要获取值栈对象,将参数放到值栈中,跳转到jsp页面时取出参数即可,具体步骤如下:
- 获取context对象
ActionContext context=ServletActionContext.getContext();
- 获取值栈对象:
ValueStack stack=context.getValueStack();
- 将参数放到值栈中:
stack.set("param",param);
- 跳转到jsp页面后取出参数,可使用struts2的<s:property>标签:
<s:property value="param"/>
若参数为对象数组,还需要<s:iterator>标签先遍历数组:<s:iterator value="list"><s:property value="param"/></s:iterator>
另外,在使用前需要先导入struts2的标签库:<%@ taglib uri="/struts-tags" prefix="s" %>
action到action之间
- 参数先放到值栈中,方法同上
- 配置文件struts.xml中设置跳转方法:重定向属性redirectAction,使用表达式带参数值,多个参数之间使用
&
隔开:<result name="success" type="redirectAction">action2?param1=${param1}&param2=${param2}</result>
3.跳转后的action2中可以使用request对象接收参数,方法如下:
HttpServletRequest request=ServletActionContext.getRequest();
String param1=request.getParameter("param1");