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

ognl详解

阅读更多

该文章转载于:http://book.csdn.net/bookfiles/727/10072722465.shtml

 

1  业务控制器

import java.util.Date;

import java.util.LinkedList;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class OgnlAction extends ActionSupport {

	// List类型属性

	private List<Person> persons;

	// execute方法

	public String execute() throws Exception {

		// 获得ActionContext实例,以便访问Servlet API

		ActionContext ctx = ActionContext.getContext();

		// 存入application

		ctx.getApplication().put("msg", "application信息");

		// 保存session

		ctx.getSession().put("msg", "seesion信息");

		// 保存request信息

		HttpServletRequest request = ServletActionContext.getRequest();

		request.setAttribute("msg", "request信息");

		// 为persons赋值

		persons = new LinkedList<Person>();

		Person person1 = new Person();

		person1.setName("pla1");

		person1.setAge(26);

		person1.setBirthday(new Date());

		persons.add(person1);

		Person person2 = new Person();

		person2.setName("pla2");

		person2.setAge(36);

		person2.setBirthday(new Date());

		persons.add(person2);

		Person person3 = new Person();

		person3.setName("pla3");

		person3.setAge(16);

		person3.setBirthday(new Date());

		persons.add(person3);

		return SUCCESS;

	}

	public List<Person> getPersons() {

		return persons;

	}

	public void setPersons(List<Person> persons) {

		this.persons = persons;

	}

}

该业务控制器分别在application、session和request中存入名为“msg”的字符串信息,另外定义了一个List类型属性,同时添加了两个Person类型元素。在配置文件中增加了相应的配置,代码如下:

<action name="OgnlAction" class="ch8.OgnlAction">
        <result name="success">/showognl.jsp</result>
</action>

 

 2  JSP视图  

showognl.jsp是使用了OGNL表达式的JSP视图,视图用来显示Action中处理的各种信息,读者可以看到,使用OGNL表达式,代码更加简洁和直观.

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <title>Struts2 OGNL 演示</title>

</head>

<body>    

    <h3>访问OGNL上下文和Action上下文</h3>

    <!-使用OGNL访问属性值-->

    <p>parameters: <s:property value="#parameters.msg" /></p>

    <p>request.msg: <s:property value="#request.msg" /></p>

    <p>session.msg: <s:property value="#session.msg" /></p>

    <p>application.msg: <s:property value="#application.msg" /></p>

    <p>attr.msg: <s:property value="#attr.msg" /></p>

    <hr />

    <h3>用于过滤和投影(projecting)集合</h3>

    <p>年龄大于20</p>

    <ul>

    <!-判断年龄-->

        <s:iterator value="persons.{?#this.age>20}">

            <li><s:property value="name" /> - 年龄:<s:property value="age" /></li>

        </s:iterator>

    </ul>

    <p>姓名为pla1的年龄: <s:property value="persons. {?#this.name=='pla1'} .{age}[0]"/></p>

    <hr />

    <h3>构造Map</h3>

    <s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />

    <p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>

</body>

</html>

 

 

OGNL中的#、%和$符号

#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。在这里笔者简单介绍它们的相应用途。

1.#符号

#符号的用途一般有三种。

—    访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute("msg") 。

—    用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

—    用来构造Map,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。

2.%符号

%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。如下面的代码所示:

<h3>构造Map</h3>

    <s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />

    <p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>

    <p>不使用%:<s:url value="#foobar['foo1']" /></p>

    <p>使用%:<s:url value="%{#foobar['foo1']}" /></p>

3.$符号

$符号主要有两个方面的用途。

—    在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

—    在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示:

<validators>

    <field name="intb">

            <field-validator type="int">

            <param name="min">10</param>

            <param name="max">100</param>

            <message>BAction-test校验:数字必须为${min}为${max}之间!</message>

        </field-validator>

    </field>

</validators>

 

<!-- page -->
分享到:
评论

相关推荐

    Struts2的OGNL详解

    ### Struts2中的OGNL详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它属于一种Expression Language(EL),主要用于在Java环境中访问对象属性。OGNL的设计思想非常独特...

    Struts2之Ognl详解案例TextOgnl

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象的属性。这篇博客将深入探讨OGNL在Struts2中的应用,并通过案例"TextOgnl"来展示其工作原理。 一、OGNL的基本...

    struts2中的ActionContext与ognl

    **OGNL详解** OGNL是一种强大的表达式语言,用于在Java对象图中导航并执行操作。在Struts2中,OGNL被广泛用于表示层与业务层数据的交互。 1. **OGNL的基本语法** - OGNL表达式通常以`#`字符开始,用于引用...

    struts ognl

    Struts OGNL详解 Struts 2框架是基于MVC设计模式的Java Web开发框架,而OGNL(Object-Graph Navigation Language)是Struts 2中的表达式语言,用于在Action类和视图之间传递数据。这篇博客将深入探讨Struts OGNL的...

    ognl表达式java使用案例详解(测试通过)

    本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_4_OGNL 共71页.pptx

    ### Java Struts2框架之OGNL详解 #### 一、OGNL概述 **OGNL (Object Graph Navigation Language)** 是一种强大的表达式语言,允许开发者通过简单的语法来读取和设置 Java 对象的属性值,调用对象的方法,遍历整个...

    OGNL表达式详解[定义].pdf

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,主要在Java应用中用于便捷地访问和操作对象的属性。在Struts2框架中,OGNL作为默认的表达式语言,提供了许多优势,使得开发者能够更高效地编写和...

    OGNL表达式详解

    使用Struts2时,利用ognl表达式在页面获取后台参数值

    Struts框架教程内含源码以及说明书可以自己运行复现.zip

    在“3.Struts2 - OGNL 详解.md”中,你会了解到OGNL(Object-Graph Navigation Language),这是Struts2中用于表达和访问对象图的表达式语言。OGNL用于在视图层和Action之间传递数据,使数据绑定变得简单高效。 “4....

    ognl源代码以及api文档

    **ognl源代码与API文档详解** ognl(Object-Graph Navigation Language)是一种强大的表达式语言,用于在Java对象图中导航、查找和修改值。它广泛应用于Spring MVC框架和其他Java应用中,作为数据绑定和表达式语言...

    ognl-2.6.11.jar 官方源码

    **ognl-2.6.11.jar 官方源码详解** OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它被广泛应用于许多Java框架,如Struts2,因为它允许动态地访问和操作对象的...

    ognl源码

    **OGNL(Object-Graph Navigation Language)源码详解** OGNL,全称为对象图导航语言,是一种强大的表达式语言,广泛应用于Java世界,特别是在Struts2框架中作为默认的表示层表达式语言。它允许开发者以简洁的方式...

    struts2中OGNL的一些概念及原理说明

    ### Struts2中OGNL的概念及原理说明 #### 一、OGNL表达式的基本用法与特点 **OGNL**,即**Object Graphic Navigation Language**(对象图导航语言),是Struts2框架中用于处理对象及其属性的强大工具之一。通过...

    ognl表达式详解

    OGNL(Object-Graph Navigation Language)是一种开源的表达式语言,广泛应用于Java环境中,特别是集成在Struts2框架中,它的主要任务是方便地访问和操作数据。OGNL提供了丰富的功能,包括类型转换、对象属性的访问...

    ognl jar包源码

    **ognl jar包源码详解** OGNL (Object-Graph Navigation Language) 是一个强大的表达式语言,主要用于在Java应用程序中获取和设置对象属性。在Java社区中,它被广泛应用于Struts2框架,用于实现视图层和业务逻辑层...

    ognl2.7.3源代码

    **ognl2.7.3源代码详解** OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。在Java世界中,它被广泛用于框架如Struts2,用于数据绑定和动态方法调用。这里的"ognl...

    JS:ognl表达式

    ### JS:ognl表达式详解 #### 一、OGNL表达式概述 OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,用于获取和设置 Java 对象的属性。它最初是由 John Rose 和 Luke Blanshard 开发,并被广泛...

    OGNL表达式

    #### 五、示例代码详解 为了更好地理解OGNL表达式的使用,我们来看一个具体的示例。假设我们在开发一个简单的Web应用,其中包含一个名为`Struts2_OGNL`的项目。 1. **配置开发环境**:首先,需要配置项目的编码...

    ognl的源码

    **ognl(Object-Graph Navigation Language)源码详解** OGNL,全称为Object-Graph Navigation Language,是一种强大的表达式语言,主要用于获取和设置Java对象的属性。它在Struts2框架中扮演着至关重要的角色,...

Global site tag (gtag.js) - Google Analytics