Struts2笔记四之Ognl

来源:互联网 发布:河北网络电视台官网 编辑:程序博客网 时间:2024/06/05 23:57
1、ognl(Object Graph Navigation Language)表达式是<s:property value="username"/>中value里面的username这个表达式
在Action类中定义private String username;并配上set/get方法,则username这个会存放在值栈中。
而ognl表达式就是取值栈中的值得表达式。
user.xxx只有传,才会构造,想初始化domain model,可以自己new, 也可以传参数值,但是这时候需要保持空的构造方法


2、Action类中有一个对象属性Cat cat,Cat中有一个对象属性Dog dog, dog有name属性
在页面中访问dog的name的ognl表达式为:<s:property value="cat.dog.name" />


3、访问对象中的普通方法<s:property value="cat.dog.name.length()" />,name是字符串,有length方法,直接调用


4、访问Action类中的方法,假设Action类中有方法public String m(){return "hello"},
在页面上用ognl表达式调用为<s:property value="m()" />


5、ognl访问静态方法和属性
访问方式@包加类名@方法名或者属性名
访问静态方法:<s:property value="@com.edifier.struts2.ognl.S@s()"/>要访问静态方法需要在struts.xml中配置一句话
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
访问静态属性:<s:property value="@com.edifier.struts2.ognl.S@STR"/>
访问Math类的静态方法:<s:property value="@@max(2,3)" />@@指定访问Math类


6、ognl访问普通类的构造方法
访问普通类的构造方法:<s:property value="new com.edifier.struts2.ognl.User(8)"/>返回的是toString方法


7、ognl访问List
List<User> users = new ArrayList<User>();
users.add(new User(1));
users.add(new User(2));
users.add(new User(3));
访问List:<s:property value="users"/>
访问List中某个元素:<s:property value="users[1]"/>
访问List中元素某个属性的集合:<s:property value="users.{age}"/>就是取出所有user的age放在一个新的集合中
访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/>


8、ognl访问Set
Set<Dog> dogs = new HashSet<Dog>();
dogs.add(new Dog("dog1"));
dogs.add(new Dog("dog2"));
dogs.add(new Dog("dog3"));
访问Set:<s:property value="dogs"/>
访问Set中某个元素:<s:property value="dogs[1]"/><!-- 这种访问是访问不到的,因为Set是无序的,无法根据下标访问某一个元素 -->


9、ognl访问Map
Map<String,Dog> dogMap = new HashMap<String,Dog>();
dogMap.put("dog100", new Dog("dog100"));
dogMap.put("dog101", new Dog("dog101"));
dogMap.put("dog102", new Dog("dog102"));
访问Map:<s:property value="dogMap"/>
访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/>
访问Map中所有的key:<s:property value="dogMap.keys"/>
访问Map中所有的value:<s:property value="dogMap.values"/>
访问容器(集合)的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/>


10、ognl的投影(过滤)
<!-- 这里的this是循环users中的所有对象中的每一个对象,获得他们的age去做判断,这句话就是找出users中user的age=1的那个user,但是有可能不止一个,所以返回的是一个集合 -->
投影(过滤):<s:property value="users.{?#this.age==1}[0]"/>
投影:<s:property value="users.{^#this.age>1}.{age}"/><!-- ^表示users中age大于1的集合中开头的那一个user -->
投影:<s:property value="users.{$#this.age>1}.{age}"/><!-- ^表示users中age大于1的集合中结尾的那一个user -->
投影:<s:property value="users.{$#this.age>1}.{age} == null"/><!-- 判断返回的集合中是否为空-->
0 0
原创粉丝点击