- ongl介绍
- ognl并不属于struts2
- OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言
- OgnlContext(ongl上下文)其实就是Map<String,Object>
- OgnlContext=根对象(1)+非根对象(N)
- 根对象在ognlContext中有且只有一个,非根对象可以有多个
- 非根对象要通过"#key"访问,根对象可以省略"#key"
- OgnlContext=根对象(1)+非根对象(N)
- EL:表达式${} ongl:表达式#{}
ongl表达式在取值是会识别表达式中的符号
- Ongl的数据结构为指栈,即先进后出
- Ongl表达式的取值优先度与session相同,都是从小到大
- 使用例
- 创建ongl上下文及取值赋值
- 源码
- 创建上下文
- 把值传入创建的上下文
- 取值
- 创建ongl上下文及取值赋值
- 工作流程
- 在用户发送请求,struts2就会创建一个ActionContext对象,以此来保证同一请求中只创建一个上下文
为了效率最大化的利用ActionContext对象,并且让用户的请求顺利的发送到后端
所以在获取前端的值时,struts2会用ongl表达式来保存
通过对象依次获取作用域中的值并加入ongl中
ongl的数据结构保证了数据的有序性
在struts2中,类名会在ongl中作为根对象保存
struts2优先赋值对象的原因式因为,通过ModelDriven获取属性值时,ongl会优先把其对应的泛型作为根对象,所以在赋值时,会优先找到根对象中又此属性的对象进行赋值
- 传参
通过ActionContext对象.setName()
ActionContext对象.Parameters()
ActionContext.setValueStack()
- 在用户发送请求,struts2就会创建一个ActionContext对象,以此来保证同一请求中只创建一个上下文