汪星人 发表于 2014-3-24 10:38

OGNL表达式的基本概念day02

1. OGNL表达式的基本概念
EL表达式
用字符串的形式表示对对象(数据)的访问
// 用代码的方式对数据访问:
Emp emp = request.getAttribute("emp");
String name = emp.getName();
out.println(name);
这种方式不太适合写在JSP页面中,不匹配!!!
<%for(...) {%>
<html...>
<%}%>
EL 字符串——对应数据访问代码
由JSP引擎实现转换工作
${emp.name}

OGNL和EL有着类似的实现原理

2. 常见的OGNL表达式
1) "属性名" (例如:name,id)
2) "数组属性","List属性" (例如:empList)
3) "Map属性['key']" (例如:map['three'])
4) "属性名.属性名...." (例如: emp.name)
5) "List属性.{属性}" (例如:empList.{salary})
6) "List属性.{?#this.属性条件...} (例如:empList.{?#this.salary>12000})
7) "{元素1,元素2,元素3}"
8) "#{key1:value1,key2:value2,key3:value3}"
9) 方法调用 (例如:"name.toUpperCase()", "list.indexOf(name)")
10) 基本运算 (例如:"age > 18", "salary + 1000", "number % 2")
11) 静态方法调用 (例如:"@java.lang.Math@round(salary)")

3. OGNL引擎
OGNL------>ROOT(业务数据)
   |
   |------->Context(环境数据),Map (#key)

4. XWork定制的OGNL引擎
ValueStack:
OGNL------>CompundROOT
   |                  |____root0
   |                  |____root1
   |                  |____root2
   |                   ....
   |
   |
   |
   |------->Context(环境数据)

对于访问Root的OGNL表达式,会CompundROOT栈顶开始依次匹配

3. ValueStack(Struts2 的核心组件)
1) ValueStack是Struts2的核心组件,为其他组件提供共享的数据结构
2) Struts2的FC每收到一个请求时,会先初始化一个ValueStack
   再实例化要访问的Action对象,然后将Action对象置于ValueStack
   的CompoundRoot栈的栈顶


页: [1]
查看完整版本: OGNL表达式的基本概念day02