欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

struts2 OGNL

程序员文章站 2022-04-18 11:46:50
...

OGNL还允许通过某个规则取得集合的子集。取得子集时有如下3个操作符:

 

1? 取出所有符合选择逻辑的元素

 

2^ 取出符合选择逻辑的第一个元素

 

3$ 取出符合选择逻辑的最后一个元素

 

如以下代码:person.relatives.{? #this.gender == 'male'}

 

直接在集合后紧跟.{}运算符表明用于取出该集合的子集,在{}内使用?表明取出所有符合选择逻辑的元素,而#this代表集合里元素。因此,上面代码的含义是:取出person里所有的gender等于malerelatives的属性的集合。

 

具体应用情景描述如下:

 

比如你的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]]