`
ysen
  • 浏览: 122223 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ognl总结

    博客分类:
  • ognl
 
阅读更多

 

 ognl & valuestack 入门

 

 

 ognl 方法总结

 

	// ***************** 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 context = new HashMap();
		context.put("p1", p1);
		context.put("p2", p2);
		
		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 context = new HashMap();
		context.put("p1", p1);
		context.put("p2", p2);
		
		User root = new User();
		root.setUsername("zhangsan");
		
		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, "zhangsan");
		
		System.out.println(user.getUsername());
	}
	
	public void testOgnl_07() throws Exception{
		User user = new User();
		
		Map context = new HashMap();
		context.put("u", user);
		
		//给context中的对象属性赋值,相当于调用user.setUsername()
		Ognl.setValue("#u.username",context, new Object(), "zhangsan");
		
		System.out.println(user.getUsername());
	}
	
	public void testOgnl_08() throws Exception{
		User user = new User();
		
		Map context = new HashMap();
		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 context = new HashMap();
		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中的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('ZHANGSAN')", user);
		Ognl.getValue("@System@out.println(#this.username)", user);
	}
	
	public void testOgnl_16() throws Exception{
		User user = new User();
		
		Ognl.getValue("setUsername('ZHANGSAN')", 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,'kdjfk','oooo'}", 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);
	}

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
4 楼 neptune 2010-03-30  
看看MVEL
3 楼 fisherhe 2010-03-30  
好的,简单易懂
2 楼 21ca 2010-03-30  
总结的挺好。

但是以前我都用 commons-beanutils 实现属性的赋值和读取。
1 楼 yzsunlight 2010-03-30  
学习  OGNL 了 顶楼主

相关推荐

    很全面的struts2_ognl总结

    Struts2 OGNL 表达式总结 OGNL(Object-Graph Navigation Language)是一种基于 Java 的表达式语言,Struts2 框架中使用 OGNL 来访问和操作 ValueStack 中的对象。在 Struts2 中,OGNL 是一个强大的工具,允许...

    OGNL表达式的使用及文档

    OGNL(Object-Graph ...总结,OGNL作为强大的表达式语言,提供了一种灵活的方式来操作和访问Java对象的属性。通过深入学习和实践,开发者能够有效地利用OGNL进行数据绑定和表达式计算,提升代码的可读性和效率。

    OGNL教程,简单,看完懂OGNL语言

    OGNL,全称Object-...总结来说,OGNL是一种强大的Java对象导航语言,尤其在Web开发中,它简化了视图和控制器之间的数据交换,提升了开发效率。了解和掌握OGNL的使用,对于从事Java Web开发的人员来说是十分必要的。

    ognl-3.0.21.jar ognl.jar

    总结起来,OGNL是Java生态中一个重要的表达式语言,主要用于对象的导航和数据绑定。了解并熟练使用OGNL能够提升Java应用的灵活性和可维护性,但同时也需要注意安全问题,防止潜在的代码注入攻击。

    ognl源码

    总结,OGNL作为强大的表达式语言,其源码揭示了如何高效地处理对象属性访问和动态方法调用。通过深入学习OGNL源码,开发者可以更好地掌握其内部机制,从而在Java应用程序中更灵活、安全地使用OGNL。

    ognl源码.rar

    总结,OGNL作为Java生态系统中的一个重要组成部分,其源码研究可以帮助开发者更高效地利用这一工具,同时加深对Java反射、动态类型和表达式语言设计的理解。通过深入学习,开发者可以更好地解决实际问题,提升开发...

    OGNL百度百科OGNL百度百科

    #### 五、总结 综上所述,OGNL 是一种功能强大且灵活的表达式语言,它不仅简化了 Java Web 开发中的数据访问操作,而且还与多种主流框架(如 Struts2)紧密集成,极大地提高了开发效率。对于想要提高 Java Web 应用...

    使用的ognl的chm

    **OGNL(Object-Graph Navigation Language)**是一种...总结起来,OGNL是Java开发中的强大工具,特别是在Web框架中,它简化了对象交互和数据绑定。深入理解和掌握OGNL,能够提升代码的灵活性和可读性,提高开发效率。

    OGNL表达式

    #### 六、总结 OGNL表达式作为一种强大且灵活的工具,极大地简化了Struts2框架中的数据访问和处理流程。通过对OGNL表达式的深入了解和掌握,开发者能够更加高效地构建复杂的Web应用程序,同时提高代码的可读性和可...

    JS:ognl表达式

    #### 七、总结 OGNL 表达式是一种功能强大且灵活的工具,适用于各种 Java 应用程序。通过对 OGNL 表达式的深入理解和掌握,开发者可以更高效地处理对象图,实现更复杂的业务逻辑。无论是对于初学者还是经验丰富的...

    ognl和el区别

    6. **总结** OGNL和EL都是为了简化数据绑定和表达式处理,但它们的设计理念和能力有所不同。了解并熟练掌握两者的特点和用法,能更好地优化Struts2应用的开发过程。在实际开发中,应根据场景选择合适的表达式语言,...

    ognl.rar_OGNL API_og_ognl

    总结来说,"ognl.rar_OGNL API_og_ognl"这个压缩包对Java开发者,尤其是那些使用Struts2或其他依赖OGNL的框架的开发者来说,是非常有价值的资源。它涵盖了OGNL的基本概念、API使用、源码学习和开发实践,是提升对...

    struts2 ognl的用法

    ### 总结 OGNL作为Struts2框架的核心技术之一,其强大的表达能力和灵活的使用方式极大地提高了开发效率。理解并熟练掌握OGNL的使用,对于深入学习和高效开发基于Struts2的应用程序至关重要。通过本文对OGNL在Struts2...

    OpenSymphony公司的ognl资源包

    总结来说,OpenSymphony公司的OGNL资源包是Java开发中的一个强大工具,提供了灵活的对象导航和数据绑定功能,极大地提高了开发效率。在实际项目中,我们需要熟练掌握OGNL的语法和用法,同时关注其安全问题,确保应用...

    ognl表达式

    OGNL(Object-Graph Navigation ...总结,OGNL是Java Web开发中的强大工具,理解和运用好OGNL可以极大地提升代码的可读性和维护性。通过深入学习,你可以更好地驾驭这门表达式语言,为你的Web应用开发带来便利。

    表达式与言EL和OGNL

    **总结** 表达式语言EL和OGNL提供了一种高效且灵活的方式来操作Java对象,特别是在Web开发中。OGNL的引入简化了视图层与模型层之间的数据交互,使得开发者能够更专注于业务逻辑,而不是数据绑定的细节。值堆栈`...

    学习OGNL在Struts2中工作原理

    #### 总结 OGNL在Struts2中的应用非常广泛,无论是数据的绑定还是页面的渲染,OGNL都发挥了重要作用。通过了解OGNL的基本概念和使用方法,开发者可以更加高效地利用Struts2框架进行开发。同时,熟悉OGNL的语法也有...

    struts2对Ognl的封装--PropertyAccessor

    总结起来,"struts2对Ognl的封装--PropertyAccessor"是关于Struts2框架如何利用OGNL语言访问和操作对象属性的关键技术。了解这一机制对于开发高效的Struts2应用至关重要,特别是当需要处理复杂的对象模型或进行定制...

    OGNL表达式源码

    总结来说,OGNL是Java世界中一种强大而灵活的表达式语言,它使得对象的属性访问变得简单易行。通过解析和评估表达式,OGNL能在各种应用场景下,如Struts2框架,实现数据绑定和表达式计算。理解其源码有助于开发者更...

Global site tag (gtag.js) - Google Analytics