在使用struts2框架后,浏览器访问一个action的过程中,如图中输入url地址:xxx.action?id=3&name=ad&xxx=xxx
首先会经过一系列的过滤器,过滤器会做很多工作,首先,在经过第一个过滤器时,就会创建create一个值栈valueStack对象,并且会初始化init一些参数放到值栈中,会放些什么东西呢?在map集合中会放request对象(包括request所带有的值),session,application等,在对象栈stack中放入我们即将访问的xxx action,和另外一个action,此时如果我们的action实现了modelDriven接口,则第二步会执行push(model),将model对象放到栈顶中,(如果没有实现该接口,则没有该过程),第三步,封装参数,将我们url地址所带有的参数封装到值栈中,存放顺序为:先从对象栈中的第一个对象model开始,调用属性的set方法为属性设值,如果参数中age,model中没有该属性,则继续向下一个对象中找,如果对象栈中没有,则都会存放到map中,到现在呢,都初始化好了,接下来就是如何在action,jsp中获取和设置的呢?
在action中,通过actionContext对象可以存取设置参数:
如果是map操作,则通过如下方式操作:
ActionContext.getContext().put(k,v)/ .get(k)
如果是对象栈操作,则通过如下方式操作:
ActionContext.getContext().getValueStack().push(obj)/.pop()