转: struts 2专用表达式(10)上

OGNLObject Graphic Navigation Language(对象图导航语言)的缩写,OGNL是一个开源项目,读者可以访问其官方站点www.ognl.org以获得源代码和相关资料。OGNL是一种功能强大的ELExpression Language,表达式语言),可以通过简单的表达式来访问Java对象中的属性。

OGNL先在WebWork项目中得到应用,也Struts 2框架视图默认的表达式语言,可以说,OGNL表达式是Struts 2框架的特点之一。

 

8.1.3  一个使用OGNL的示例

下面笔者以一个简单的示例来帮助读者理解OGNL表达式。使用OGNL表达式,需要在www.ognl.org网站下载一个ognl.jar插件包,将该文件复制到classpath路径下即可。建立一个复合类型,如代码8.1所示。

代码8.1  定义复合类型

 

package  ch8;

import  java.util.Date;

// 团队类

public   class  Team  {

    
// 团队名称

    
private String teamname;

    
// 定义团队人员属性

    
private Person person;

    
// 团队人数

    
private int personnum;

    
//属性的getter和setter方法

    
public String getTeamname() {

        
return teamname;

    }


    
public void setTeamname(String teamname) {

        
this.teamname = teamname;

    }


    
public Person getPerson() {

        
return person;

    }


    
public void setPerson(Person person) {

        
this.person = person;

    }


    
public int getPersonnum() {

        
return personnum;

    }


    
public void setPersonnum(int personnum) {

        
this.personnum = personnum;

    }


}


//  定义人员类

class  Person  {

    
// 姓名

    
private String name;

    
// 年龄

    
private int age;

    
// 人员出生日期

    
private Date birthday;

    
//属性的getter和setter方法

    
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;

    }


    
public void setBirthday(Date birthday) {

        
this.birthday = birthday;

    }


}


 

代码8.1所示内容定义了两个复合类型:团队(team)和人员(person)类型。使用OGNL表达式示例,如代码8.2所示。

代码8.2  使用OGNL表达式示例

 

package  ch8;

import  java.util.HashMap;

import  java.util.Map;

import  ognl.Ognl;

import  ognl.OgnlException;

public   class  TestOGNL  {

        
public static void main(String[] args) {

        
// 定义一个Map对象

        Map m 
= new HashMap();

        
//定义一个Team对象

        Team team1 
= new Team();

        team1.setTeamname(
"团队1");

        
//定义一个Person对象

        Person person1 
= new Person();

        person1.setName(
"pla1");

        
//添加team元素

        team1.setPerson(person1);

        
//定义一个Team对象

        Team team2 
= new Team();

        team2.setTeamname(
"团队2");

        
//定义一个Person对象

        Person person2 
= new Person();

        person2.setName(
"pla2");

        
//添加team元素

        team2.setPerson(person2);

        

        
//添加Map元素

        m.put(
"team1", team1);

        m.put(
"team2", team2);

        
try {

            System.out.println(Ognl.getValue(
"team1.teamname", m));

            System.out.println(Ognl.getValue(
"team2.person.name", m));

            System.out.println(Ognl.getValue(
"teamname", team2));

            System.out.println(Ognl.getValue(
"person.name", team2));

        }
 catch (OgnlException e) {

        }


    }


}


 

代码8.2所示内容定义了一个Map类型的嵌套属性,如图8.1所示。

8.1  嵌套属性示意图

运行该示例,控制器显示如下信息:

团队1

pla2

团队2

pla2

 说明 

OGNL可以使用非常简单的表达式来访问多层嵌套属性,为开发者提供了一个有力的工具。

猜你喜欢

转载自serenity.iteye.com/blog/1101428