【Struts2】值栈

值栈的结构:
这里写图片描述
右边放的是一个个对象。并且里面有一些对象。
Map的操作, put(k,V); Get(k)
Stack的操作是,push(obj) 压栈 ;pop(obj);

结合—————–

一:存数据的过程
上文中,我们说到Struts2 的拦截器。那么在拦截的过程中会先创建值栈,在值栈里面放了一些初始化的数据。例如request,session,application等等。 如果应用过程中想用的话,直接用#就可以getSeeion到。
也会在栈中放入action对象。

同时还会经过其它拦截器。它会继续在值栈中添加信息。比如参数拦截器会继续在值栈中添加参数信息。ModelDriven 拦截器是把model放到栈顶。

实现的时候,也就是在对应的action中去实现ModelDriven接口。例如:

public class RoleAction  extends ActionSupport implements ModelDriven<Role>

其中接口里面只有唯一的一个接口方法。我们实现如下:

private Role model=new Role();
    public Role getModel(){
        return model;
    }

这里写图片描述
然后下一个拦截器是params。封装参数
此时栈里面有这个model对象(id;name) action对象(id;age)
如果当前请求地址是:
Xx.action?id=3&name=ab&age=20&xx=00
注意:该地址中传过了4个参数。id,name,age,xx

那这里的封装参数就是把参数放到对象中,会先放到属性中。从栈顶开始找 , 找到了就不会往下找了。当放Id的时候,会先
到model中的Id,然后就会把这个参数放到对象中。接着开始处理name。最后xx在对象中并没有对应的属性。则不放到栈中,但依然能用#方式取到该值。
二:取数据
此时,相当于数据中心有了数据。接下来就是我们怎么去应用它。

Action中需要通过ActionContext对象,里面有一个getContext,getValueStack
这里写图片描述

然后在JSP中通过OGNL表达式获取。
这里写图片描述

最后,在注意一个取值顺序。
这里写图片描述

这样就是整个值栈的完整过程。需要注意值栈对象的作用范围是一个请求。

发布了199 篇原创文章 · 获赞 122 · 访问量 38万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章