struts2 OGNL

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)测试一下效果

控制台显示:[dashuo.action.Relative@160323b, dashuo.action.Relative@81d1a2, dashuo.action.Relative@e9e2f0]

页面显示:[dashuo.action.Relative@160323b, dashuo.action.Relative@81d1a2]

 

 

 

你可能感兴趣的:(struts2)