什么是OGNL
OGNL:Object Graph Navigation Language 对象导航图语言
开源项目,取代页面中Java脚本,简化数据访问
和EL同属于表达式语言,但功能更为强大
让我们通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。
OGNL融入框架流程
Ognl表达式
1.#号用法
- 访问OGNL上下文和action上下文,#相当于ActionContext.getContext();
- 如果访问的是map中的值而不是对象栈中的值,由于map中的数据不是根对象,所以在访问时需要添加#前缀。
名称 | 作用 | 例子 |
parameters | 包含当前HTTP请求的Map | #parameters.id[0]=request.getParameter(“id”) |
request | 包含当前HttpServletRequest属性的Map | #request.username=request.getAttribute(“username”); |
session | 包含当前HttpSession属性的Map | #session.username=session.getAttribute(“username”); |
application | 包含当前ServletContext属性的Map | #application.username=application.getAttribute(“username”); |
attr | 用于按照request>session>application顺序访问其属性 | #attr.username相当于按照顺序在以上三个范围内读取username的属性,直到找到为止。 |
值栈与OGNL
值栈(ValueStack)
由Struts 2框架创建的存储区域,具有栈的特点Action的实例会被存放到值栈中
OGNL访问值栈按照从上到下的顺序,靠近栈顶的同名属性会被读取