`

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);
 }
}

分享到:
评论

相关推荐

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

    通过深入学习和实践,你可以掌握Ognl的核心概念,理解其在Web开发中的重要作用,并能够安全有效地使用Ognl表达式进行数据访问和控制逻辑的实现。这个压缩包中的例子是一个很好的起点,可以帮你快速上手Ognl,开启你...

    STRUTS2+ognl

    Struts2是一个强大的Java web应用程序框架...深入理解Struts2的架构和Ognl的表达式语法,能够帮助开发者快速构建出功能强大的应用程序。通过不断实践和学习,你将能够熟练掌握这个框架,为你的IT职业生涯增添更多价值。

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

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

    strut2入门几个小demo

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

    struts2入门demo

    这个"struts2入门demo"是为初学者准备的一个基础实践项目,旨在帮助理解Struts2的核心概念和工作流程。让我们深入探讨一下Struts2的关键知识点。 首先,Struts2是一个基于MVC(Model-View-Controller)架构的框架,...

    Struct2入门例子

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

    Struts2入门demo

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

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

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

    struts入门最简单例子

    这个"struts入门最简单例子"旨在帮助初学者快速理解并掌握Struts2的基本用法。Struts2框架提供了丰富的功能,如动作映射、结果类型、拦截器、动态方法调用等,使得开发者能够构建结构清晰、可维护性强的Web应用程序...

    Struts2入门教程.pdf

    ### Struts2入门教程知识点概览 #### 一、Struts2框架简介 - **Struts2起源**:Struts2并非一个全新的Web框架,而是建立在WebWork框架设计理念之上,融合了Struts1的优点而形成的一个框架。可以说,它是Struts1与...

    Struts2入门案列

    这个"Struts2入门案例"旨在帮助初学者理解并掌握Struts2的基本概念和操作。在这个案例中,我们可能会涉及到以下几个核心知识点: 1. **Struts2架构**:Struts2框架基于拦截器(Interceptor)模式,通过一系列的拦截...

    struts2入门经典教程

    学习Struts2,首先要理解MVC模式的基本原理,然后通过实际项目练习创建Action、配置Struts.xml、编写拦截器、使用Ognl表达式等。对于有Struts1基础的开发者,需要注意Struts2与Struts1的主要差异,如更强大的拦截器...

    sturts2入门例子

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

    struts2框架入门

    为了更好地理解Struts2,你需要学习如何创建Action类、编写struts.xml配置文件、使用Interceptor、处理结果以及理解OGNL的使用。通过阅读提供的"15_学员用书_STRUTS2核心_IMAGE版.pdf",你可以逐步掌握这些概念和...

    轻松入门之struts2

    该教程的内容涵盖了从入门到高级话题的多个方面,包括Struts2的核心概念、表单验证、国际化实现、拦截器、IOC模式探讨、Struts2标签的使用、OGNL表达式语言、文件上传下载功能、视图的浅析、与AJAX、Hibernate、...

    几个Struts2 入门例子

    这个"几个Struts2 入门例子"显然旨在帮助初学者理解并掌握Struts2的基础用法。以下是对Struts2核心概念和常见实践的详细说明: 1. **MVC架构模式**:MVC模式将应用逻辑分为了模型、视图和控制器三个部分,Struts2...

    struts入门与实践.zip

    这个压缩包的"struts入门与实践"可能包含了以上各个方面的教程和示例代码,对于初学者来说,是一个很好的学习资源,可以帮助他们快速理解和掌握Struts框架的使用。通过学习和实践,开发者能够构建出结构清晰、易于...

    Struts2入门V3.0.pdf

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Struts1的基础上进行了很多改进和增强,提供了..."Struts2入门V3.0.pdf"这份文档将详细地介绍这些内容,是初学者入门的良好教程。

    struts2入门教程

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Web开发领域中被广泛使用,...通过学习这个入门教程,你将能够理解和运用Struts2的核心特性,为你的Web开发工作打下坚实的基础。

Global site tag (gtag.js) - Google Analytics