在上一篇文章《深入浅出理解struts2中的值栈》中,我们已经了解了struts2为我们提供的一种灵活方便的存储机制“值栈”。那么这篇文章大家一起来了解一下往struts2值栈中存储数据的三种方式
1. 使用值栈对象中的set方法
步骤:
- 在action中获取值栈对象
- 调用值栈对象的set方法存值
代码示例:
public class ValueStackDemoAction extends ActionSupport {
public String execute() throws Exception {
//1 获取值栈对象
ActionContext context = ActionContext.getContext();
ValueStack stack = context.getValueStack();
//2 调用值栈对象中的set方法
stack.set("demo", "DemoData");
return "success";
}
}
set方法使用map方式储存值,第一个元素为String类型的key,第二个元素为Object类型的value,value中可以存放任意对象。
使用set方法向值栈中存值后,我们用debug标签来查看一下值栈的结构,如图:
如图我们清晰的看到,set方式是使用HashMap的方式将值存入到值栈中,然后取值的时候更具Map中的key值即可将其value取出。
2. 使用值栈对象中的push方法
步骤:
- 在action中获取值栈对象
- 调用值栈对象的push方法存值
代码示例:
public class ValueStackDemoAction extends ActionSupport {
public String execute() throws Exception {
//1 获取值栈对象
ActionContext context = ActionContext.getContext();
ValueStack stack = context.getValueStack();
//2 调用值栈对象中的push方法
stack.push("abcd");
return "success";
}
}
push方法只接收一个Object类型的参数,可以存放任意类型的对象
push方式是自动将所存的数据转为对应的对象类型,然后放入值栈中,如图:
3. 在action中定义变量(或对象),使用相应的get方法(最常用,最重要的方法)
步骤:
- 在action定义变量
- 生成变量的get方法
- 在执行方法里面为变量赋值
代码示例:
public class ValueStackDemoAction extends ActionSupport {
//1. 声明变量
public String name;
//2. 生成变量的get方法
public String getName(){
return name;
}
//3. 在执行方法中为变量赋值
public String execute() throws Exception {
name = "DemoData";
return "success";
}
}
我们来看一下使用这种方法存值后值栈中的数据结构,如图:
可以看出这种方式存值不会在值栈中创建新的对象,而是直接将值存进了值栈中原有的action对象中,这种方式的好处就是避免了值栈中存储空间的浪费,不用为每个值都分别设置存储空间。因此这种方式更加常用。
使用这种方法做一个向值栈中存放一个list集合的示例
代码如下:
- User实体类
public class User {
private String username;
private String password;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
- Action类
public class ListDemoAction extends ActionSupport {
// 1. 定义list变量
private List<User> list = new ArrayList<User>();
// 2. 生成get方法
public List<User> getList() {
return list;
}
public String execute() throws Exception {
//3 向list中设置值
User user1 = new User();
user1.setUsername("小奥");
user1.setPassword("123");
user1.setAddress("美国");
User user2 = new User();
user2.setUsername("小王");
user2.setPassword("250");
user2.setAddress("越南");
list.add(user1);
list.add(user2);
return "success";
}
-
值栈中的结构如下:
由图可知我们已经成功的这个list集合存放进了值栈中。