首页 > 代码库 > struts2中的值栈对象ValueStack
struts2中的值栈对象ValueStack
ValueStack, 即值栈对象。
值栈对象:
是整个struts数据存储的核心,或者叫中转站。
用户每次访问struts的action,都会创建一个Action对象、值栈对象、ActionContext对象; 然后把Action对象放入值栈中; 最后再把值栈对象放入request中,传入jsp页面。
(key: struts.valueStack); 开发者只需要通过ActionContext对象就可以访问struts的其他的关键对象。 (ActionContext是给开发者用的,便于学习与使用。)
一。获取值栈对象的两种方式:
// 获取值栈对象,方式1: HttpServletRequest request = ServletActionContext.getRequest(); ValueStack vs1 = (ValueStack) request.getAttribute("struts.valueStack"); // 获取值栈对象,方式2: ActionContext ac = ActionContext.getContext(); ValueStack vs2 = ac.getValueStack(); System.out.println(vs1 == vs2);//true
二。值栈对象的存储数据的原理
ValueStack vs = ac.getValueStack(); /***************操作根元素的几种方法*****************/ // 设置数据: 入栈 //vs.push(new User(1002,"Tom")); // 栈顶 //vs.pop(); // 移除栈顶元素 // 如何存储? map结构存储 //vs.set("user1", new User(1,"Jacky1")); //vs.set("user2", new User(2,"Jacky2"));
public class OgnlDemo3 extends ActionSupport{ @Override public String execute() throws Exception { // 测试迭代标签 List<User> list = new ArrayList<User>(); Map<Integer,User> map = new HashMap<Integer, User>(); // 初始化 for (int i=1; i<11; i++) { User user = new User(i,"Jack" + i); list.add(user); map.put(user.getId(), user); } // 保存到request中,是非根数据 取值时候要加# ActionContext.getContext().getContextMap().put("list", list); ActionContext.getContext().getContextMap().put("map", map); return super.execute(); } }
<body> <br/>一、. list迭代</br> <table border="1"> <tr> <td>编号</td> <td>名称</td> </tr> <s:iterator var="user" value="http://www.mamicode.com/#request.list" status="st"> <tr class=<s:property value="http://www.mamicode.com/#st.even?‘even‘:‘odd‘"/> > <td><s:property value="http://www.mamicode.com/#user.id"/></td> <td><s:property value="http://www.mamicode.com/#user.name"/></td> </tr> </s:iterator> </table> <br/>二、迭代map</br> <table border="1"> <tr> <td>编号</td> <td>名称</td> </tr> <s:iterator var="en" value="http://www.mamicode.com/#request.map" status="st"> <tr> <td><s:property value="http://www.mamicode.com/#en.key"/></td> <td><s:property value="http://www.mamicode.com/#en.value.name"/></td> </tr> </s:iterator> </table> <!-- Ognl表达式可以取值,也可以动态构建集合 --> </body>
<body> <br/>一、.构建 list集合</br> <s:iterator var="str" value="http://www.mamicode.com/{‘a‘,‘b‘}"> <s:property value="http://www.mamicode.com/#str"/> </s:iterator> <br/>一、.构建 map集合</br> <s:iterator var="en" value="http://www.mamicode.com/#{‘cn‘:‘China‘,‘usa‘:‘America‘}"> <s:property value="http://www.mamicode.com/#en.key"/> <s:property value="http://www.mamicode.com/#en.value"/> <br/> </s:iterator> </body>
<body> <!-- 页面: 必须要拿到ValueStack --> <br/>1. 取根元素的值<br/> <s:property value="http://www.mamicode.com/user.id"/> <s:property value="http://www.mamicode.com/user.name"/> <s:property value="http://www.mamicode.com/user.address"/> <s:property value="http://www.mamicode.com/user.address.city"/> <s:property value="http://www.mamicode.com/user.address.province"/> <br/>2. 取非根元素的值<br/> <s:property value="http://www.mamicode.com/#request.cn"/> <s:property value="http://www.mamicode.com/#session.Session_data"/> <s:property value="http://www.mamicode.com/#application.Application_data"/> <br/> <!-- 自动找request/session/application,找到后立刻返回 --> <s:property value="http://www.mamicode.com/#request_data"/> <s:property value="http://www.mamicode.com/#attr.Session_data"/> <s:property value="http://www.mamicode.com/#attr.Application_data"/> <br/> <!-- 获取请求的参数数据 --> <s:property value="http://www.mamicode.com/#parameters.userName"/> <!-- struts的调试标签:可以观测值栈数据 --> <s:debug></s:debug> </body>
struts2中的值栈对象ValueStack
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。