一.什么是OGNL
OGNL是基于java运行环境与文本世界的沟通的桥梁;
1.什么是OGNL表达式
OGNL表达式就是所谓的属性链;
2.Struts2中的设置和取得
<s:textfield name="username" label="UserName"/>
获取
user.portfolio.name
这是一种比较复杂的情况,加入在属性链上出现null的情况如何呢?
解决方案是:
框架会尝试进行创建,这就需要属性的类型满足javaBean的要求:
(1)必须有无参的构造方法;
(2)公开的属性要有set,get方法;
3.使用List和数组
java代码 OGNL
list.get(0) list[0]
((user)list.get(0)).getName list[0].name
list.size() list.size
list.isEmpty list.isEmpty
array[0] array[0]
array.length array.length
list的创建
List list = new ArrayList(3); {1,2,3}
list.add("111");
list.add("222");
list.add("333");
4.Map的使用
map.get("foo"); map['foo'] map.foo
map.get(new Integer(1)) map[1]
((User)map.get("userA").getName()) map['userA'].Name
map.size(); map.size
map.isEmpty(); map.isEmpty
map的创建
#{“foo”:"bar","baz":"whazzit"}
5.过滤和投影
OGNL支持两种集合的处理方式;
过滤,允许你根据某一规则过滤一系列对象;
投影:允许你根据某个规则转换一系列对象;
过滤语法:collectionName.{? expression}
投影语法:collectionName.{expression}
users.{? #this.age>30} 从集合当中获取年龄大于30的用户的新集合
users.{^ #this.age>30} 从集合当中获取年龄大于30的第一个用户
users.{$ #this.age>30} 从集合当中获取年龄大于30的最后一个用户
users.{username} 获取所用用户的用户名集合
users.{firstName + '' + lastName} 获取所有用户的firstName+lastName集合
users.{? #this.age>30}.{userName} 从集合当中获取年龄大于30的用户的用户名集合
二.高级OGNL知识
1.字面值类型
Char 'a'
String 'aaa',"aaaa" ,"a" 当只有一个字符组成字符串时要使用双引号
Boolean true false
int 123
double 123.5
BigDecimal 123b
BigInteger 123h
2.操作符
+ 加,-减,* 乘, / 除,++ ,--,% 取余, ==,<,>,=
操作符合想象的一样,没有什么特别的,
3.方法的调用
Java代码 OGNL
userBean.makeUserNo() makeUserNo() 此处假设userBean已经在valuestack中
userBean.getUserNO() userNO
getUserNO()
4.访问静态方法和字段
有两种访问方法:
1.需要指定完全限定的类名
@[fullClassName]@[property or methodCall]
实例:
@com.test.UserBean@userName
@com.test.UserBean@makeUserNO()
2.根据valuestack解析;
@vs@userName
@vs@makeUserNO()