ValueStack:struts2的一个存放数据的数据结构(核心)
ValueStack大致可以理解为:由Map和对象栈组成
ValueStack作用范围:一个请求,用它来代替request的作用域。
当来了一个请求时,便创建出一个ValueStack,并进行一些初始化,
往Map中放:request=...,session=...,application=...,attr=...,parameters=...,等等
往对象栈中放:action和另一个默认对象
拦截器:ModelDriven
作用:把model放在对象栈栈顶,
参数拦截器:params
作用:封装参数,把参数封装到对象栈中,会先封装到对象栈中的属性里(一找到相同属性就封装)
Action里怎么用ValueStack:ActionContext.getContext().getValueStack()
JSP里怎么用ValueStack:OGNL表达式
调用ValueStack
1.调用map:
ActionContext.getContext().put(k,v);//将一组对象存入map
ActionContext.getContext().get(k);//通过key拿到value
2.调用对象栈:
ActionContext.getContext().getValueStack().push(obj);//将obj放到栈顶
ActionContext.getContext().getValueStack().pop();//拿到栈顶对象
OGNL表达式
格式:
在struts.xml中,OGNL的格式为:${ognl}
在JSP中,OGNL的格式为:%{ognl}
语法:
user = findValue("user")//先找对象栈,再找map,一找到就返回
#user = map.get("user")//直接从map中获取
#user.name = map.get("user").getName()
findValue(expr)的查找顺序
1.从对象栈中查找指定名称的属性,从栈顶开始向下找,找到后就返回。
2.如果从对象栈中没有找到属性,则从map中查找对应的key值,找到后就返回。
EL表达式(struts中):
作用域查找顺序:page,request,ValueStack.findValue(),session,application