`
yunzhongzi
  • 浏览: 13950 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

OGNL框架的使用入门(一)

阅读更多
    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
    开源框架OGNL就是基于该表达式语言的一个实现,你可以从http://www.ognl.org得到ognl.jar,源码和一些文档。本文主要通过一个例子讲述通过Java Main函数如何使用ognl.jar。
    当然,首先得建立你的工程,然后把ognl.jar引入到你的类路径中。同时把junit.jar也引入到你的类路径,因为本文的例子的测试代码需要用到junit.jar。
    然后建立Java类Company.java,User.java。这两个类只是简单的JavaBean。代码如下:
/**
 * 公司对象
 * */
public class Company {
    /**
     * 公司名字
     * */
    private String companyName;
	public String getCompanyName() {
		return companyName;
	}
	public void setCompanyName(String companyName) {
		this.companyName = companyName;
	}
}
/**
 * 用户对象
 * */
public class User {
	
	/**
	 * 姓名
	 * */
	private String name;
	
	/**
	 * 所在公司
	 * */
	private Company company;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Company getCompany() {
		return company;
	}
	public void setCompany(Company company) {
		this.company = company;
	}

}
   

    接着,建立类TestOngl.java,主要的测试代码都在该类中。
package ognltest;

import java.util.HashMap;
import java.util.Map;

import junit.framework.TestCase;
import ognl.Ognl;
import ognl.OgnlException;

public class TestOngl extends TestCase{
    //此处为类中的代码。
}


    类中的第一方法为,testOgnlSimpleProperty,演示了如何用Ognl从一个简单对象中取属性值。代码如下:
/**
	 * 测试简单属性
	 * */
	public void testOgnlSimpleProperty()
	{
		User user=new User();
		user.setName("abc");
		try {
			Object result = Ognl.getValue("name",user);//********(1)
			System.out.println("***简单属性**********result::"+result);
			//输出:***简单属性**********result::abc
		Company com=new Company();
		com.setCompanyName("某某科技有限公司");
		user.setCompany(com);
		
		result=Ognl.getValue("company.companyName",user);//*******(2)
		System.out.println("***嵌套属性**********result::"+result);
		//输出:***嵌套属性**********result::某某科技有限公司
		} catch (OgnlException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}



    其中行(1)中的”name”,行(2)中的” company.companyName”就是表达式语言了,只不过这两个表达式是最但的表达式了。
    类中的第二方法为,testFromMap,演示了如何用Ognl从一个Map中取对象中取对象或对象的属性值。代码如下:
/**
	 * 测试从Map中取
	 * */
	public void testFromMap() throws OgnlException
	{
		Map distObject=new HashMap();
		distObject.put("abc","10000");
		Object result = Ognl.getValue("abc",distObject);//********(1)
		
		System.out.println("***从Map中取简单属性**********result::"+result);
		//输出:***从Map中取简单属性**********result::10000
		User user=new User();
		user.setName("myName");
		distObject.put("user",user);
		result = Ognl.getValue("user.name",distObject);//********(2)
		System.out.println("***从Map中取嵌套属性**********result::"+result);
		//输出***从Map中取嵌套属性**********result::myName
		
	}



    好了,通过这个例子,相信大家知道Ognl表达式是怎么一回事了,也应该了解怎么使用ognl.jar。不妨大家自己动手去联系一下这个例子,感受一下ognl的强大之处。
    其实,现在流行的MVC框架webwork,struts2都用到了OGNL,如果你学会了OGNL的基础知识,那么你在学webwork中的OGNL时,或者struts2中的OGNL时,也就轻车熟路了。
接下去的章节将更进一步讲述OGNL的使用。Qq: 916932073。
分享到:
评论
3 楼 andyhua2013 2012-05-08  
[color=red]运行出错,你还有个架包没导啊,javassist.jar,导入这个包运行才会对。[/color]
2 楼 xiebiao110 2010-12-21  
http://www.ognl.org居然不能访问了
1 楼 wangzhongjie 2008-04-24  
^_^,谢谢了,跟着你的例子终于知道ognl的用户,但是有点疑问就是beanutil也有这些功能呀,为什么一定要用ognl呢

相关推荐

    struts2入门框架搭建需要的jar

    struts2入门框架搭建需要的jar,包含log4j,struts2-core-2.5,ognl-3.1.15

    java从入门到精通70个PPT

    javaPPT 从入门到精通 从基础到框架 70个PPT 1.初识java 2.变量、数据类型和运算符和表达式 3运算符和程序流程结构 4.数组 5.类和对象 6.字符串 7.封装,继承,多肽 8.接口与抽象类 9.java集合类 10.jdbc 11 html...

    Struts2入门教程(全新完整版)

    2.OGNL入门 24 3.普通方法访问 24 4.静态方法访问 24 5.默认类Math的访问 24 6.调用普通类的构造方法 25 7.集合对象初步 25 8.集合对象进阶 25 9.N语法top语法 26 10.获取Stack Context中的信息 26 11.总结$ # %的...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    9.2.2 Struts2框架中的OGNL 9.2.3 操作普通的属性与方法 9.2.4 访问静态方法与属性 9.2.5 访问数组 9.2.6 访问List、Set、M印集合 9.2.7 投影与选择 9.3 Struts2的标签库 9.3.1 数据标签的应用 9.3.2 控制标签的应用...

    Struts2 in action中文版

    第一部分 Strut 2:一个全新的框架 第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 ...

    Struts2入门教程。包括jquery集成等。入门必看

    第 1章 STRUTS2入门................................................................................................................................................3 第 2章STRUTS2晋级.....................

    百度地图开发java源码-springboot-crawler:springboot入门,爬虫项目实战

    一、介绍 本项目作为SpringBoot入门实战项目,主要实现异步任务定时爬取百思不得姐数据,并将数据解析入库,提供给前端页面展示。前端采用LayUI相关组件,界面算美观。项目代码没有过度封装(注释详细)。对于刚入门...

    Struts2电子课件

    Struts2的讲义 1、入门及基本配置 2、类型转化 3、输入校验 4、校验框架 5、拦截器 6、文件上传与下载 7、国际化 8、深入了解struts 9、ognl

    (2.0版本)自己写的struts2+hibernate+spring实例

    全当给所有打算使用struts2却没有接触过的人一个入门而已.我也是初看.才2天而已.所以各位高手就不要笑话了.愿大家都能成为高手. <br> 项目发布以后的第一个页面是登陆.后台代码没有写相关的验证代码.并不是...

    springmybatis

    (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看...

    AnyFo - Struts 2_1爆胎易筋丸.pdf

    1 入门.....................................................................................................................................4 1.1 环境搭建..................................................

Global site tag (gtag.js) - Google Analytics