struts2的ognl表达式语言

ognl是Object-GraphNavigationLanguage的缩写,比el语言更强大
举个例子说明下

import java.util.Date;

public class Person {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
@Override
public String toString() {

return "姓名:"+name+"\t年龄:"+age;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
private String name;
private int age;
private Date birthday;
}

//---------------------------------------------------------
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class OgnlAction extends ActionSupport {

/**
*
*/
private static final long serialVersionUID = 1L;
private List<Person> persons=new ArrayList<Person>();
public List<Person> getPersons() {
return persons;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {
ActionContext ctx=ActionContext.getContext();
ctx.getApplication().put("application", "application info");
ctx.getSession().put("session", "session info");
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("request","request info");
Person p1=new Person();
p1.setAge(2);
p1.setBirthday(new Date());
p1.setName("张三");
Person p2=new Person();
p2.setAge(32);
p2.setBirthday(new Date());
p2.setName("张三2");
Person p3=new Person();
p3.setAge(25);
p3.setBirthday(new Date());
p3.setName("张三3");
Person p4=new Person();
p4.setAge(55);
p4.setBirthday(new Date());
p4.setName("张三4");
Person p5=new Person();
p5.setAge(15);
p5.setBirthday(new Date());
p5.setName("张三5");
persons.add(p1);
persons.add(p2);
persons.add(p3);
persons.add(p4);
persons.add(p5);
return SUCCESS;
}

}
//-------------------------------------------------
<h1>测试struts2的ognl表达式语言</h1>
<ul>
<s:property value="#request.request"/>
<s:property value="#session.session"/>
<s:property value="#application.application"/>
<s:property value="persons"/>
</ul>
<h3>测试struts2的ognl表达式语言的过滤和投影的集合</h3>
<ul>
<!-- 年龄大于20 -->
<s:iterator value="persons.{?#this.age>20}">
<li>
<s:property value="name"/> 年龄:<s:property value="age"/>
</li>
</s:iterator>
</ul>
<div>
<p>ognl运算符用法</p>
?:获得所有符合条件的元素<br>
<ul>
<!-- 年龄大于20 -->
<s:iterator value="persons.{?#this.age>20}">
<li>
<s:property value="name"/> 年龄:<s:property value="age"/>
</li>
</s:iterator>
</ul>
^:符合条件的第一个元素<br>
<s:property value="persons.{^#this.age>20}"/><br>
$:符合条件的最后一个元素<br>
<s:property value="persons.{$#this.age>20}"/><br>
</div>
Lambda表达式语法(迭代)<br>
<s:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)" />

#符号的用途一般有三种
访问非根对象属性:如#session.session
用于过滤和投影集合:如 <s:iterator value="persons.{?#this.age>20}">
用于构建map对象:如<s:set name="map" value="#{'key1':'value1','key2':'value2'}"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值