EL表达式主要功能:用于访pageContext,request,session,application范围内存储的数据。
OGNL不仅可以访问数据,还具有访问方法,对集合进行操作等功能。
OGNL是什么?
Object Graphics Navigation Language 对象图导航语言。主要作用是对一些复杂对象的属性和方法进行访问。
OGNL技术可以独立使用,封装在ognl.jar开发包中。
2)OGNL工作原理
OGNL工具由三部分构成,分别是
a. OGNL引擎:负责解释执行OGNL表达式,按表达式区root或map区域寻找数据。
b. Root根对象区域:访问该区域数据OGNL表达式简洁方便。适合放置访问频繁的对象元素。
c. Map对象存储区 :访问该区域需要使用“#key”访问。适合放置访问不频繁的对象元素。
使用时,给OGNL引擎指定一个表达式,该引擎根据表达式去Root区或Map区访问对象的属性或方法。
*3)OGNL表达式语法
a.访问Root对象某个简单属性
表达式: "属性名"
b.访问Root对象某个数组或者List集合
表达式:"属性名[0]"
c.访问Root对象某个Map集合
表达式:"属性名.key"或者"属性名['key']"
d.访问Root对象某个复合类型属性address
表达式: "address.子属性"
e.访问Root对象某个复杂属性 List<Address> addresses
表达式:"addresses[0].子属性"
f.访问Root对象的某个属性的方法
表达式:"属性名.方法()"
g.支持Java中的表达式和运算符
h.定义一个List常量
表达式:{"A","B","C"}
i.定义一个Map常量
表达式:#{"key1":value1,"key2":value2}
j.访问静态常量或方法
表达式:"@包名.类型@常量名或方法"
上述语法如果访问Map区域一样使用,只要注意追加"#key".
el表达式是什么?
一种简单的计算规则,用于给标签的属性赋值,现在,也可以直接输出。
(1)访问bean的属性。
方式一:
${user.name} : 容器会依次从pageContext,request,session,application查找绑订名称为"user"的对象(即调用getAttribute方法),找到后,调用该对象的getName方法并输出。如果值为null,会转换成""输出;
另外,如果找不到该对象,也会输出""。
如果要指定查找范围,可以使用pageScope,requestScope,sessionScope,applicationScope,比如:${sessionScope.user.name}
方式二:
${user["name"]}
这种方式允许[]里出现变量或者序号(从0开始,用来访问数组中的元素)
(2)进行一些简单的计算,计算结果可以直接输出,也可以给标签的属性赋值。
1)算术运算: "+","-","*","/","%"。注意"+"只能进行加法操作,不能进行连接操作。
2)关系运算:">",">=","<","<=","==","!="。
3)逻辑运算: "&&","||","!"。
4)empty运算: empty 以下四种情况均为true
空字符串 空的集合 值为null 找不到对应的值
(3)访问请求参数值
${param.age}: 等价与 request.getParameter("age");
${paramValues.city} : 等价与 request.getParameterValues("citys");
El表达式的查找方式:
el:${pageinfo.totalPage},pageContext->request-->session-->application,拿到pageinfo,调用pageinfo的getTotalPage()方法,获取到值,然后输出.${pageinfo['totalPage']}