Struts2 值栈总结(ValueStack)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2 值栈总结(ValueStack)相关的知识,希望对你有一定的参考价值。
1、获取值栈
1 //获取值栈的第一种方式 2 ValueStack valueStack1 = (ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack"); 3 //获取值栈的第二种方式 4 ValueStack valueStack2 = ActionContext.getContext().getValueStack(); 5 System.out.println(valueStack1); 6 System.out.println(valueStack2);
2、值栈包括两部分:root栈和map栈
1、root栈:继承了List接口,又称之为对象栈
2、map栈:实现了Map接口,又可以称之为上下文栈(context)
3、Root栈的存值和取值
1、存值(先进后出)
1 1、Push压栈 (获取值栈) 2 valueStack.push("zhangsan"); 3 2、set 压入栈顶 (键值对形式) 4 //set:创建一个map集合,将数据存入该集合中,最终将map集合压入root栈栈顶 5 valueStack2.set("name","wangwu"); 6 3、使用成员变量方式 7 private String name = "maliu"; 8 9 public String getName() { 10 return name; 11 }
2、取值
1、Push 取值 <!-- 通过s:property标签获取数据 value:是一个ognl表达式,通过valu值可以到值栈中去查询对应的数据 [0].top:表示获取root栈栈顶的数据 --> 获取栈顶数据:<s:property value="[0].top"/><br> 获取栈顶数据:<s:property/><br> 2、set 取值 Or 成员变量方式存值 <%-- 如果栈顶是map集合:通过集合的key可以直接获取value值 通过name到值栈中从上往下进行查找,找到的第一个进行返回 --%> 获取栈顶map中的数据:<s:property value="name"/><br>
3、Map栈的存值和取值
1、存值 or 取值(表示直接从map栈查找,而不是从root栈栈顶开始从上往下查找。)
1 1、Put 方法存值 2 //将数据存入map栈 3 //由于map栈本质就是一个集合,因此存储方式和map一样 4 ActionContext.getContext().put("name", "tianqi"); 5 2、取值 6 <%-- 7 从map栈获取数据:在ognl表达式中使用#表示直接从map栈查找数据 8 --%> 9 10 获取map栈中的数据:<s:property value="#name"/>
4、%主要作用是控制解析或者不解析
1 “%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表 达式,就比如:<s:textfield value=”%{username}”>。 也可在OGNL表达式中,添加%{‘ ’}或者’’,来让其变成普通 2 字符串而不解析,比如:<s:property value=”%{‘username}’”> 3 4 简单的说:%表达式的作用是,可以让字符串变成支持ognl表达式的解析,也可以让解析的表达式变成字符串,
5、$号的使用
$主要作用是在相关配置文件中引入OGNL表达式,让其在配置文件中也能解析OGNL表达式。(换句话说:$用于在配置文件中获取值栈的值用的。)
以上是关于Struts2 值栈总结(ValueStack)的主要内容,如果未能解决你的问题,请参考以下文章
Struts2剖析Struts2中的反射技术 ValueStack(值栈)
Struts2数据传输的背后机制:ValueStack(值栈)