Struts2框架是基于HttpServletRequest请求的,框架在处理每个请求时,都会创建该请求的运行环境,并将请求对应的Action放入其中,Action对象被放在值栈对象上,User对象作为javaBean的一个属性被暴露出来,值栈本身放在运行环境中。
在处理请求的过程中,所有业务数据对象都保存在值栈中,值栈充当了一个容器,通过它,在框架的各个地方可以随时访问这些业务对象,在生成页面的过程中,页面标签也可以访问值栈。
为什么值栈是一个虚拟对象??
假如栈内存中放了多个对象,且存在相同的名称时,先找到的对象的属性就作为”虚拟“对象的属性。
struts2会实例化任何用于填充数据的对象。
List:
不需要初始化任何一个List,
如果没有类型说明,任意一个List中的元素都是String类型。
OGNL表达式是由属性链构成的。
访问集合对象:
iterator标签在迭代过程中会把迭代的每一个对象暂时压入值栈的栈顶,这样在该标签内部可以直接访问元素属性和方法,就可以用不带value的property标签输出数据。
对于集合对象的访问,还有以下几种情况:
1.访问列表或数组的某一个元素,可以用属性名【index】
userLIst【1】.name
2.访问Map的某一个元素,可以用属性名【key】
userMap【key】.name
3.通过size或length访问集合长度。
<set name="变量名" value="值默认Object类型" scope="作用域">
scope的值可以是:page、request、session、application、action(默认)