值栈
1 之前在web中,在Servlet 里面进行操作,把数据放到域对象中,在页面使用el表达式获取到,域对象在一定范围内,存值与取值。
2 在Struts2 中提供本身一种存储机制,类似于域对象,可以存值与取值
1)在action中吧数据放到值栈里,在页面中获取值栈的数据
3 值栈的存储的位置
1)每次访问action的时候,都会有一个action对象,在每个action里面都有一个值栈对象
4 Servlet和action的区别
1)Servlet:默认在第一次访问的时候创建,创建一次,单实例对象
2)Action:访问时创建,每次访问的时候都会创建,多实例对象。
总结:值栈类似于域对象可以存值与取值,每个action对象中有一个值栈对象
获取值栈对象:
1 使用一个类actionContext类里面的方法得到值栈对象
//获取ActionContext对象
ActionContext context=ActionContext.getContext();
//获取值栈对象
ValueStack stack1=context.getValueStack();
补充:栈:先进后出
值栈的内部结构:
1 值栈分成两部分
1) root 结构 list集合
2) context结构 map集合 key----value
1) value存储的是一些对象的一些引用
2) key 存储的是一些固定的值
向值栈中放数据:
1 第一种:获取值栈的对象,调用值栈对象方法,set
2 第二种:获取值栈对象,调用值栈对象方法push
3 第三种:在action中定义变量,生成action方法***************
在aaction中的成员变量的位置设声明变量,生成get方法,然后在方法内给变量赋值。
向值栈中放对象:
1)定义对象变量
2)生成变量的get方法
3)在执行方法中赋值
向值栈中存放list集合
1)定义list集合变量
privateArrayList<User> list= new ArrayList<User>();
2)生成变量的get方法
publicArrayList<User> getList() {returnlist;}
3)在执行的方法里面向list存放值
User user1=new User();
User user2=new User();
user1.setAddrest("中国");
//。。。。。。。。。。。
list.add(user1);
list.add(user2);
从值栈中获取数据
使用Struts2 标签加上ognl获取数据
1 获取字符串
privateString username;
public String getUsername() {
return username;}
public String execute() throwsException {
username="itcast";
return "success";
}
<s:debug></s:debug>
<s:property value="username"/>
2获取对象
<s:property value="user.username"/>
<s:property value="user.password"/>
<s:property value="user.addrest"/>
private User user=new User();
public User getUser(){
return user;
}
user.setAddrest("zhongguo");
user.setPassqord("123");
user.setUsername("wangmeihua");
3获取 list 对象
privateArrayList<User> list= new ArrayList<User>();
public ArrayList<User>getList() {
return list;}
User user1=newUser();
User user2=newUser();
user1.setAddrest("meiguo");
//。。。。。。。。。。。。。
list.add(user1);
list.add(user2);
第一种方法
<s:property value="list[0].username"/>
<s:property value="list[1].username"/>
第二种方式
<s:iterator value="list">
<!-- 遍历list -->
<s:property value="username"/>
<s:property value="password"/>
</s:iterator>
第三种方式
<s:iterator value="list"var="user">
<s:property value="#user.username"/>
<s:property value="#user.password"/>
</s:iterator>