struts2 OGNL
OGNL还允许通过某个规则取得集合的子集。取得子集时有如下3个操作符:
1,? 取出所有符合选择逻辑的元素
2,^ 取出符合选择逻辑的第一个元素
3,$ 取出符合选择逻辑的最后一个元素
如以下代码:person.relatives.{? #this.gender == 'male'}
直接在集合后紧跟.{}运算符表明用于取出该集合的子集,在{}内使用?表明取出所有符合选择逻辑的元素,而#this代表集合里元素。因此,上面代码的含义是:取出person里所有的gender等于male的relatives的属性的集合。
具体应用情景描述如下:
比如你的Action中有一个自定义的Person类型的成员变量叫person,Person类里有一个List类型的成员变量叫relatives,给relatives加入泛型,让其存放的元素是另一自定义的Relative类型(当然,也可以不加入泛型),Relative里有个String类型的成员变量,叫gender。好了,看下面代码
@Override
public String execute() throws Exception {
Relative r1 = new Relative();
Relative r2 = new Relative();
Relative r3 = new Relative();
r1.setGender("male");
r2.setGender("male");
r3.setGender("female");
person.getRelatives().add(r1);
person.getRelatives().add(r2);
person.getRelatives().add(r3);
System.out.println(person.getRelatives());
return SUCCESS;
}
action返回的页面代码:<s:property value="person.relatives.{? #this.gender == 'male'}"/>
访问你的Action(笔者访问的请求是dashuo.action)测试一下效果
控制台显示:[[email protected], [email protected], [email protected]]
页面显示:[[email protected], [email protected]]
上一篇: 你可以使用 play framework 做5件很爽的事情
下一篇: Struts2 OGNL