值栈
什么是值栈:
值栈就是OGNL表达式存取数据的地方,Struts2是在有请求的时候为每一个请求创建一个新的值栈
也就是说值栈和请求是一一对应的,值栈封装了一次请求所需要的所有的数据
这种一一对应的关系使值栈能够线程安全的为每一个请求提供功能的数据存取服务
值栈的作用:
值栈可以作为一个数据的中转站,用于在前台,后台之间传递数据,最典型的就是将Struts2的标签和OGNL结合
值栈实际上是一个接口,在Struts2中使用OGNL时,实际上使用时实现了接口OgnlValueStack类,这个类是ONGL基础
值栈声明周期:
valueStack贯穿整个Action声明周期,每个Action对象实例都拥有一个ValueStack对象,在其中保存Action对象和其他对象
Struts2把ValueStack对象保存在名为“struts.valueStack”的request属性中,ValueStack与Action对象生命周期保持一致
随着request的创建而创建,销毁而销毁
值栈的获取方式:
值栈在开发中的应用
Struts2是一个MVC框架,从Action到页面会涉及数据交换的问题,例如将Action中的数据显示在页面
值栈的作用就在于解决这样的问题
两种方式进行数据交换
属性驱动
Action代码
public class ValueStackAction2 extends ActionSupport {
private Customer c;
public Customer getC() {
return c;
}
public void setC(Customer c) {
this.c = c;
}
public String execute() {
return SUCCESS;
}
}
配置文件代码
jsp页面代码 别忘记加<%@taglib prefix="s" uri="/struts-tags"%>
测试
模型驱动 只有action和jsp页面有区别 其他都和属性驱动一样
public class ValueStackAction3 extends ActionSupport implements ModelDriven<Customer>{
private Customer c = new Customer();
public String execute() {
return "success2";
}
@Override
public Customer getModel() {
// TODO Auto-generated method stub
return c;
}
}