二十二、OGNL的一些其他操作
- 投影
?判断满足条件
动作类代码: ^ $
public class Demo2Action extends ActionSupport {
public Demo2Action() {
System.out.println("实例化了");
}
private List<Person> persons = new ArrayList<Person>();
public List<Person> getPersons() {
return persons;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
public String execute() {
// 初始化几个人
persons.add(new Person("wdx", 18));
persons.add(new Person("wd", 28));
persons.add(new Person("cxy", 38));
return SUCCESS;
}
}
Jsp代码:
<!-- person.{?#this.age>20}针对集合persons的每一个对象的age属性如果大于20,则输出 -->
<!--会用p为key ,当前遍历的元素为value,放到contextMap中 -->
<s:iterator value="persons.{?#this.age>20}" var="p">
<s:property value="#p.username"/>
<s:property value="#p.age"/>
</s:iterator>
<hr/>
<!-- persons.{username} 这个集合已经改变了,[wdx, wd, cxy],因此变量指向的是一个String字符串 -->
<!--会用p为key ,当前遍历的元素为value,放到contextMap中 -->
<s:iterator value="persons.{username}" var="p">
<s:property value="#p"/>
</s:iterator>
<s:debug></s:debug>
- 创建集合对象
<s:iterator value="{'aa','bb','cc'}" var="s">
<s:property value="#s" /><br/>
</s:iterator>
<br/>----利用OGNL表达式创建一个Map---<br/>
<s:iterator value="#{'a':'aa', 'b':'bb','c':'cc'}}" var="me">
<s:property value="#me.key"/>=<s:property value="#me.value"/>
</s:iterator>
<s:debug></s:debug>
- OGNL中的%{}操作符的用法
作用:把普通字符串当做OGNL表达式来用
<%
Person p = new Person("王雪",19);
ActionContext.getContext().getValueStack().push(p);
%>
<!-- UI标签中的lable属性的取值,不是一个OGNL表达式,如果要把一个普通字符串当做OGNL表达式,请使用%{} -->
<s:textfield name="uname" label="%{username}"></s:textfield>
<s:debug></s:debug>
知识:把OGNL表达式当做普通字符串对待,请使用单引号或双引号
- OGNL中的$用法
- 在struts.xml配置文件和国际化消息资源文件中,使用OGNL,放在${}中
以下是在配置文件中使用OGNL表达式
- 在JSP中使用${}
EL表达式还是原有功能,如果在域范围中找不到,{}内部的东西就变成了OGNL表达式。