`

OGNL入门

阅读更多
package org.darkness.ognl.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import org.darkness.oa.model.Person;
import org.darkness.oa.model.User;

public class OgnlTest extends TestCase {
	
	// ***************** root对象的概念 ******************* //
	public void testOgnl_01() throws Exception{
		User user = new User();
		user.setUsername("暗之幻影");
		
		//相当于调用user.getUsername()方法
		String value = (String)Ognl.getValue("username", user);
		System.out.println(value);
	}
	
	public void testOgnl_02() throws Exception{
		User user = new User();
		Person p = new Person();
		p.setName("暗之幻影");
		user.setPerson(p);
		
		//相当于调用user.getPerson().getName()方法
		String value = (String)Ognl.getValue("person.name", user);
		System.out.println(value);
	}
	
	public void testOgnl_03() throws Exception{
		User user = new User();
		Person p = new Person();
		p.setName("暗之幻影");
		user.setPerson(p);
		
		//可以使用#root来引用根对象,相当于调用user.getPerson().getName()方法
		String value = (String)Ognl.getValue("#root.person.name", user);
		System.out.println(value);
	}
	
	// *********************** context的概念 **********************//
	public void testOgnl_04() throws Exception{
		Person p1 = new Person();
		Person p2 = new Person();
		p1.setName("风");
		p2.setName("云");

		Map<String,Person> context = new HashMap<String,Person>();
		context.put("p1", p1);
		context.put("p2", p2);
		
		// 需要加上#才表示到context中取数据,否则表示从根目录下取值
		String value = (String)Ognl.getValue("#p1.name + ',' + #p2.name", context, new Object());
		System.out.println(value);
	}
	
	public void testOgnl_05() throws Exception{
		Person p1 = new Person();
		Person p2 = new Person();
		p1.setName("风");
		p2.setName("云");
		
		Map<String,Person> context = new HashMap<String,Person>();
		context.put("p1", p1);
		context.put("p2", p2);
		
		User root = new User();
		root.setUsername("雨");
		
		String value = (String)Ognl.getValue("#p1.name + ',' + #p2.name + ',' + username", context, root);
		System.out.println(value);
	}
	
	// ******************* OGNL赋值操作 ************************//
	public void testOgnl_06() throws Exception{
		User user = new User();
		
		//给root对象的属性赋值,相当于调用user.setUsername()
		Ognl.setValue("username", user, "暗之幻影");
		
		System.out.println(user.getUsername());
	}
	
	public void testOgnl_07() throws Exception{
		User user = new User();

		Map<String, User> context = new HashMap<String, User>();
		context.put("u", user);
		
		//给context中的对象属性赋值,相当于调用user.setUsername()
		Ognl.setValue("#u.username", context, new Object(), "暗之幻影");
		
		System.out.println(user.getUsername());
	}
	
	public void testOgnl_08() throws Exception{
		User user = new User();
		
		Map<String, User> context = new HashMap<String, User>();
		context.put("u", user);
		
		//给context中的对象属性赋值,相当于调用user.setUsername()
		//在表达式中使用=赋值操作符来赋值
		Ognl.getValue("#u.username = '暗之幻影'",context, new Object());
		
		System.out.println(user.getUsername());
	}
	
	public void testOgnl_09() throws Exception{
		User user = new User();
		Person p = new Person();
		
		Map<String,Object> context = new HashMap<String,Object>();
		context.put("u", user);
		context.put("p", p);
		
		//给context中的对象属性赋值,相当于调用user.setUsername()
		//在表达式中使用=赋值操作符来赋值
		Ognl.getValue("#u.username = '风',#p.name = '云'",context, new Object());
		
		System.out.println(user.getUsername()+","+p.getName());
	}
	
	//****************** 使用OGNL调用对象的方法 **********************//
	public void testOgnl_10() throws Exception{
		User user = new User();
		user.setUsername("暗之幻影");
		
		String value = (String)Ognl.getValue("getUsername()", user);
		System.out.println(value);
	}
	
	public void testOgnl_11() throws Exception{
		User user = new User();
		
		Ognl.getValue("setUsername('暗之幻影')", user);
		System.out.println(user.getUsername());
	}
	
	// ******************* OGNL调用类变量、静态方法 *************************//
	public void testOgnl_12() throws Exception{
		User user = new User();
		
		Ognl.getValue("setUsername('暗之幻影')", user);
		Ognl.getValue("@System@out.println(username)", user);
	}
	
	public void testOgnl_13() throws Exception{
		User user = new User();
		
		Ognl.getValue("setUsername('暗之幻影')", user);
		Ognl.getValue("@System@out.println(@org.darkness.struts2.test.Utils@toLowerCase(username))", user);
	}
	
	// ********************* OGNL中的this表达式 **********************//
	public void testOgnl_14() throws Exception{
		Object root = new Object();
		Map context = new HashMap();
		
		List values = new ArrayList();
		for(int i=0; i<11; i++){
			values.add(i);
		}
		context.put("values", values);
		
		Ognl.getValue("@System@out.println(#values.size.(#this > 10 ? \"大于10\" : '不大于10'))", context, root);
		
	}
	
	public void testOgnl_15() throws Exception{
		User user = new User();
		
		Ognl.getValue("setUsername('暗之幻影')", user);
		Ognl.getValue("@System@out.println(#this.username)", user);
	}
	
	public void testOgnl_16() throws Exception{
		User user = new User();
		
		Ognl.getValue("setUsername('暗之幻影')", user);
		Ognl.getValue("@System@out.println(username.(#this.toLowerCase()))", user);
	}
	
	// ******************* 如何把表达式的解释结果作为另外一个表达式,OGNL中括号的使用 **********************//
	public void testOgnl_17() throws Exception{
		Object root = new Object();
		Map context = new HashMap();
		User u = new User();
		u.setUsername("暗之幻影");
		context.put("u", u);
		context.put("fact", "username");
		
		/**
		 * 1、首先把#fact表达式进行解释,得到一个值:username
		 * 2、解释括号中的表达式#u,其结果是user对象
		 * 3、把括号中表达式的结果作为root对象,解释在第一步中得到的结果(即把第一步的结果看成另外一个表达式) 
		 */
		String value = (String)Ognl.getValue("#fact(#u)", context, root);
		System.out.println(value);
	}
	
	public void testOgnl_18() throws Exception{
		Person person = new Person();
		Map context = new HashMap();
		User u = new User();
		u.setUsername("暗之幻影");
		context.put("u", u);
		
		/**
		 * 相当于调用person这个根对象的fact方法,并把#u的解释结果作为参数传入此方法 
		 */
		String value = (String)Ognl.getValue("fact(#u)", context, person);
		System.out.println(value); //输出是 "暗之幻影,"
	}
	
	public void testOgnl_19() throws Exception{
		Person person = new Person();
		Map context = new HashMap();
		User u = new User();
		u.setUsername("暗之幻影");
		context.put("u", u);
		
		/**
		 * 1、先计算表达式fact,得到结果是:username
		 * 2、解释括号中的表达式#u,其结果是user对象
		 * 3、把括号中表达式的结果作为root对象,解释在第一步中得到的结果(即把第一步的结果看成另外一个表达式)
		 */
		String value = (String)Ognl.getValue("(fact)(#u)", context, person);
		System.out.println(value); //输出"暗之幻影"
	}
	
	// ********************* OGNL访问集合元素 **************************//
	public void testOgnl_20() throws Exception{
		Object root = new Object();
		Map context = new HashMap();
		
		//用OGNL创建List对象
		List listvalue = (List)Ognl.getValue("{123,'暗之幻影','风之水影'}", context, root);
		context.put("listvalue", listvalue);
		
		//用OGNL创建数组
		int[] intarray= (int[])Ognl.getValue("new int[]{23,45,67}", context, root);
		context.put("intarray", intarray);
		
		//用OGNL创建Map对象
		Map mapvalue = (Map)Ognl.getValue("#{'listvalue':#listvalue,'intarray':#intarray}", context, root);
		context.put("mapvalue", mapvalue);
		
		Ognl.getValue("@System@out.println(#listvalue[0])", context, root);
		Ognl.getValue("@System@out.println(#intarray[1])", context, root);
		Ognl.getValue("@System@out.println(#mapvalue['intarray'][2])", context, root);
		Ognl.getValue("@System@out.println(#mapvalue.intarray[0])", context, root);
	}
}

分享到:
评论
2 楼 cl1154781231 2011-01-14  
不错!很好!
1 楼 thebye85 2010-05-14  
 

相关推荐

    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.总结$ # %的...

    学习Ognl 这是为初学Ognl者提供的一个小例子,本人也在学习中,希望通过它能让你认识 Ognl ,送达到入门!!

    **Ognl (Object-Graph Navigation Language)** 是一种强大的表达式语言,主要用于在Java应用程序中获取和设置对象的属性。Ognl起源于Struts框架,但后来发展成为一个独立的库,广泛应用于许多Java Web应用中,如...

    OGNL Language Guide 中文版

    ### OGNL语言指南知识点概览 #### 一、OGNL简介 - **定义**: OGNL (Object Graph Navigation Language) 是一种用于访问和操作 Java 对象图的表达式语言。它特别适用于处理 JavaBeans 属性,使得在不编写额外代码的...

    STRUTS2+ognl

    本文将详细介绍Struts2、Webwork以及Ognl的相关知识点,并提供入门指导。 **Struts2框架** Struts2是在原有的Struts1基础上发展起来的,它整合了Webwork框架的优势,提供了更灵活的控制流和更强大的拦截器机制。...

    struts2开发入门以及webWork开发入门文档

    - **OGNL表达式**:OGNL(Object-Graph Navigation Language)是Struts2中的默认表达式语言,用于在Action和视图之间传递数据。 2. **WebWork入门** - **框架起源**:WebWork是Struts2的前身,它的许多理念和设计...

    strut2入门几个小demo

    这个"strut2入门几个小demo"是针对初学者的一个实践教程,旨在帮助新接触Struts2的开发者快速上手,理解并掌握其基本概念和核心功能。 1. **值栈(Value Stack)** Struts2中的值栈是核心概念之一,它是一个存储...

    Struct2入门例子

    本入门例子旨在帮助初学者快速理解并掌握Struts2的核心概念和使用方法。 在Struts2框架中,主要涉及以下几个关键组件: 1. **Action类**:Action类是业务逻辑的载体,它是用户请求处理的中心。在`demoStruts`项目...

    struts2入门demo

    在JSP页面中,你可以通过OGNL(Object-Graph Navigation Language)表达式来获取值栈中的数据。 6. **JSP页面**:在`myStruts`目录下,你可能会找到一些JSP文件,这些文件作为视图,负责展示数据和用户交互。Struts...

    Struts2入门demo

    这个"Struts2入门demo"旨在为初学者提供一个快速理解并实践Struts2框架的起点。以下是对Struts2核心概念和相关知识点的详细说明: 1. **MVC模式**:Struts2是基于Model-View-Controller(MVC)设计模式的,它将业务...

    struts2入门教程

    很好的struts2入门教程,网上搜集整理的! 内容: ·常用的Struts 2.0的标签(Tag)介绍 ... ·Struts 2中的OGNL ·Strus 2的新表单标签的使用 ·Struts 2与AJAX ·Struts2分页 ·完全Struts's Tiles入门

    Struts2入门案例 实现简单的Struts2入门jar包.rar

    6. ** strut2入门案例**:这个入门案例可能是创建一个简单的“Hello, World”程序,演示如何配置Struts2框架,创建Action类,编写对应的JSP页面,并在web.xml中进行必要的初始化设置。这个例子会帮助初学者快速理解...

    Structs2.0入门学习

    本篇文章将深入探讨Structs2.0的基础知识,特别是其对OGNL(Object-Graph Navigation Language)的集成和使用。 首先,Structs2.0 支持多种表达式语言,包括OGNL、JSTL、Groovy和Velocity。其中,OGNL是Struts 2...

    struts入门最简单例子

    此外,Struts2还支持OGNL(Object-Graph Navigation Language)表达式语言,用于在Action和视图之间传递数据。例如,Action中有一个`message`属性,我们可以在JSP页面中通过`${message}`来获取并显示这个属性的值。 ...

    struts2入门经典教程

    本教程“Struts2入门经典教程”是针对初学者精心编写的,旨在帮助新手快速掌握Struts2的基础知识,并为有Struts1背景的开发者提供平滑的学习路径。 Struts2的核心特性包括: 1. **Action类与Result**:在Struts2中...

    Struts2轻松入门,合适入门的朋友。

    ### Struts2入门 #### 1.1 环境搭建 在开始学习Struts2之前,首先需要准备以下开发环境: - **Struts版本**:Struts2.1.2 - **JDK版本**:JDK1.5 - **Tomcat版本**:6 - **MySQL版本**:5.0 - **MyEclipse版本**...

    sturts2入门例子

    学习这个入门案例,你将能理解Struts2的基本架构,如何编写Action类,配置Struts2,使用OGNL,以及如何处理用户输入和展示视图。此外,你还将了解到如何在实际项目中应用Struts2,比如创建一个简单的论坛应用。通过...

    Struts_2.0从入门到精通

    《Struts_2.0从入门到精通》深入解析 一、为Struts2.0做好准备 在开始Struts2.0的学习之旅前,首要任务是搭建开发和运行环境。这一步骤至关重要,它包括从Apache官方网站下载Struts2.0包,以及在Eclipse等IDE中...

Global site tag (gtag.js) - Google Analytics