Struts2中JSP获取值栈(ValueStack)中的数据
2017-06-16 23:33
375 查看
什么是值栈
值栈就是OGNL表达式存取数据的地方,Struts2是在有请求到达的时候为每个请求创建一个新的值栈,这也就是说值栈和请求是一一对应的,值栈封装了一次请求所需要的所有数据,这种一一对应的关系使值栈能够线程安全地为每个请求提供公共的数据存取服务。值栈的生命周期
值栈可以作为一个数据的中转站,用于在前台-后台之间传递数据。ValueStack贯穿整个Action的生命周期,每个Action类的对象实例 都拥有一个ValueStack对象,在其中保存当前Action对象和其他相关对象。Struts2框架把ValueStack对象保存在名为”struts.valueStack”的request属性中,也就是说,ValueStack与Action的生命周期保持一致,ValueStack的生命周期是随着request的创建而创建,随着request的销毁而销毁。在jsp中取Action中的数据
取普通属性:在Action中定义以下数据
private String str; //setter 和 getter 方法 //或者将str修饰符设为public public String execute() { this.str="str"; }
在jsp中使用EL表达式获取
${str} //或者用struts标签库 <s:property value="str"/>
部署运行后在jsp页面中显示 str
取对象数据
先定义一个User类
public class User { private int id; private String name; public User(int id, String name) { super(); this.id = id; this.name = name; } //setter and getter }
在Action中声明User对象并创建
private User user; //setter and getter public String execute() { this.user = new User(1,"user1"); return "success"; }
在jsp中获取user的属性
<s:property value="user.id" />//${user.id} <s:property value="user.name"/><br/>//${user.name} ${user.id}${user.name}
部署运行和在jsp页面显示
1user1 1user1
取List集合中的数据
Action中定义
private List<User> list; //setter and getter public String execute(){ this.list = new ArrayList<User>(); //模拟存入数据 for(int i=0; i<3; i++){ list.add(new User(i,"username"+i)); } return "success"; }
Jsp页面中获取
<s:iterator var="u" value="list">//value为Action集合List对象的名称 <s:property value="#u.id"/>//${u.id} <s:property value="#u.name"/><br/>//${u.name} </s:iterator>
部署运行后在jsp页面显示
0 username0 1 username1 2 username2
取Map集合中的数据
在Action中定义对象
private Map<String, User> map; //setter and getter public String execute(){ this.map = new HashMap<String, User>(); for(int i=0; i<3; i++){ map.put("user"+i,new User(i,"username"+i)); } return "success"; }
在JSP中取数据
<s:iterator var="u" value="map"><!-- u is a entry --> //EL取值 <s:property value="#u.key"/>//${u.key} <s:property value="#u.value.id" />//${u.value.id} <s:property value="#u.value.name"/><br/>//${u.value.name} </s:iterator>
部署运行后显示
user0 0 username0 user2 2 username2 user1 1 username1
PS
在jsp页面导入struts2标签库<%@taglib prefix="s" uri="/struts-tags"%>
EL表达式默认支持在四个作用域取值,分别为page、request、session和application,EL表达式能够访问值栈中数据的原因,就是因为Struts2对request进行了增强,如果在request作用域中没有查找到对应的值,就去值栈中查找,找到后台会将数据取出。在请求范围中找不到时,先作为属性在root中找,找不到会作为key到contextMap中找对应的value
相关文章推荐
- Struts2数据传输的背后机制:ValueStack(值栈)
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- Struts2数据传输的背后机制:ValueStack(值栈)
- Struts2数据传输的背后机制:ValueStack(值栈)
- Struts2数据传输的背后机制:ValueStack(值栈)
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- Struts2数据传输的背后机制:ValueStack(1)(值栈)(转载)
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- Struts2数据传输的背后机制:ValueStack(值栈)
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- Struts2数据传输的背后机制:ValueStack(值栈)
- Struts2数据传输的背后机制:ValueStack(值栈)
- JSP + STRUTS2 获取表单数据乱码
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- Struts2数据传输的背后机制:ValueStack(值栈)
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)【很经典】
- Struts2数据传输的背后机制:ValueStack(值栈)