`
jinyanliang
  • 浏览: 307979 次
  • 性别: Icon_minigender_1
  • 来自: 河南开封
社区版块
存档分类
最新评论

ognl表达式入门应用

 
阅读更多
package foo.test;

public class User {

	private Person person;
	private String username;
	private String sex;
	
	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}
}


package foo.test;

public class Person {

	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}


package foo.test;

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

import ognl.Ognl;

public class OgnlTest {
	
	public static void main(String[] args) throws Exception{
		new OgnlTest().testOgnl_01();
	}
	
	// ***************** root对象的概念 ******************* //   
    public void testOgnl_01() throws Exception{   
        User user = new User();   
        user.setUsername("暗之幻影");   
        user.setSex("男");
        //相当于调用user.getUsername()方法   
        String value = (String)Ognl.getValue("username + ',' + sex", 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表达式的语法非常直观,例如`name`表示访问对象的`name`属性,`list[0]`表示访问列表的第一个元素。更复杂的表达式如`person.address.city`表示访问`person`对象的`address`属性下的`city`属性。Ognl还支持方法...

    OGNL Language Guide 中文版

    #### 四、OGNL表达式 - **表达式类型**: - **常量**: 数字、字符串等。 - **属性引用**: 访问 JavaBean 的属性。 - **数组和 List 下标**: 使用方括号 `[ ]` 访问数组或 List 的元素。 - **方法调用**: 直接...

    struts2入门经典教程

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

    在Java的Struts框架中ONGL表达式的基础使用入门

    值栈是一个存储Action实例和相关数据的结构,它使得在栈顶的Action实例的属性可以直接通过OGNL表达式访问,无需添加#前缀。例如,要访问Action的某个属性,可以直接写`name`而不是`#name`。 OGNL中的三个关键符号...

    轻松入门之struts2

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

    Struts课件

    "14 struts2_ognl值栈课件.ppt"、"15 struts2_ognl表达式课件.ppt"和"16 struts2_ognl标签课件.ppt"聚焦于Struts2中的表达式语言OGNL。OGNL用于在Action与视图之间传递数据,允许在JSP中直接访问Action属性。这些...

    STRUTS2+ognl

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

    Struts2.0初学者示例项目

    核心元素:Action处理用户请求,拦截器执行预/后处理逻辑,OGNL表达式语言简化数据传递。 构建Struts2应用步骤 环境配置:JDK、IDE(Eclipse/IntelliJ IDEA)、构建工具(Maven/Gradle)与Struts2库。 Maven项目创建...

    1_Struts2入门与配置

    在JSP中,你可以直接使用OGNL表达式来访问值栈中的对象和属性。 7. ** strut2 框架集成**:Struts2可以方便地与Spring、Hibernate等其他框架集成,实现更复杂的业务逻辑和数据持久化。 8. **插件和扩展**:Struts2...

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

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

    WebWork入门

    4. **Ognl表达式语言**:WebWork使用OGNL(Object-Graph Navigation Language)作为默认的表达式语言,用于在视图和模型之间传递数据,以及在Action中访问和修改对象属性,使得数据绑定更加方便。 5. **动态方法...

    Struts小项目BBS系统

    这个项目涵盖了多个重要的知识点,包括Action、Result、struts.xml配置、开发流程、ExtJS的基本使用、OGNL表达式、以及四层开发模式。以下是对这些关键知识点的详细说明: 1. **Struts框架**:Struts是一个开源的...

    webwork2.0参考资料

    它不仅提供了丰富的功能, 如拦截器、验证机制、OGNL表达式语言等, 还支持与Spring、Hibernate等其他开源项目进行无缝集成, 极大地提高了开发效率和应用质量。通过本指南的学习, 开发者能够迅速掌握WebWork的核心概念...

    Struts 2 Tutorial.pdf

    - **OGNL 表达式语言详解**:深入讲解OGNL表达式语言及其语法,包括如何访问Java集合如数组、列表和映射等。 #### Struts 2 拦截器教程 - **拦截器执行过程**:通过示例说明拦截器如何在Action执行前后被调用以及...

    strut2入门几个小demo

    在值栈中,你可以将Action对象放入栈顶,然后在JSP页面上直接通过OGNL表达式访问这些对象的属性。 2. **OGNL(Object-Graph Navigation Language)** OGNL是Struts2中的默认表达式语言,用于在值栈中获取和设置...

    Struts2 最基础快速入门

    例如,在JSP中,你可以直接使用OGNL表达式来获取Action中的属性值。 7. **结果类型(Result Types)**:Struts2支持多种结果类型,如`dispatcher`(转发到一个JSP页面)、`redirect`(重定向到另一个URL)等。结果...

    Struts2入门demo

    3. **JSP页面**:视图部分,展示了如何使用OGNL表达式从Action获取数据。 4. **Web.xml**:可能包含Struts2过滤器的配置,使框架能够拦截和处理HTTP请求。 5. **资源文件**:如`messages.properties`,用于国际化。 ...

    Struts2 轻松入门

    通过"Struts2轻松入门"教程,你将学习到如何设置开发环境、创建第一个Struts2应用、编写Action、配置拦截器、处理表单提交、使用OGNL表达式以及实现国际化等功能。此外,教程可能还会涵盖如何调试和优化Struts2应用...

Global site tag (gtag.js) - Google Analytics