struts2-OGNL详解

一.什么是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()

         

猜你喜欢

转载自zhujianguo1981.iteye.com/blog/1746726
今日推荐