OGNL表达式概述

1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写

* 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象

* 通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性

 

2. Struts2框架使用OGNL作为默认的表达式语言

* OGNL是一种比EL强大很多倍的语言

* xwork提供 OGNL表达式

* ognl-3.0.5.jar

 

3. OGNL 提供五大类功能

   * 支持对象方法调用

   * 支持类静态的方法调用和值访问

   * 访问OGNL上下文(OGNL context)和ActionContext

   * 支持赋值操作和表达式串联

   * 操作集合对象

 

4. 测试的代码

// 访问对象的方法

@Test

public void run1() throws OgnlException{

OgnlContext context = new OgnlContext();

// 获取对象的方法

Object obj = Ognl.getValue("'helloworld'.length()", context, context.getRoot());

System.out.println(obj);

}

 

// 获取OGNL上下文件的对象

@Test

public void run3() throws OgnlException{

OgnlContext context = new OgnlContext();

context.put("name", "美美");

// 获取对象的方法

Object obj = Ognl.getValue("#name", context, context.getRoot());

System.out.println(obj);

}

 

// 从root栈获取值

@Test

public void demo3() throws OgnlException{

OgnlContext context = new OgnlContext();

Customer c = new Customer();

c.setCust_name("haha");

context.setRoot(c);

String name = (String) Ognl.getValue("cust_name", context, context.getRoot());

System.out.println(name);

}

 

 

**技术分析之在Struts2框架中使用OGNL表达式**

 

1. Struts2引入了OGNL表达式,主要是在JSP页面中获取值栈中的值

2. 具体在Struts2中怎么使用呢?如下步骤

* 需要先引入Struts2的标签库

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

 

* 使用Struts2提供的标签中的标签

> <s:property value="OGNL表达式"/>

 

3. 在JSP页面使用OGNL表达式

* 访问对象方法

<s:property value="'hello'.length()"/>

 

**总结OGNL表达式的特殊的符号**

 

1. # 符号的用法

* 获得contextMap中的数据

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

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

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

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

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

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

 

* 构建一个map集合

* 例如:

* <s:radio name="sex" list="{'男','女'}"></s:radio>

* <s:radio name="sex" list="#{'0':'男','1':'女'}"></s:radio>

 

2. % 符号的用法

* 强制字符串解析成OGNL表达式。

> 例如:在request域中存入值,然后在文本框(<s:textfield>)中取值,现在到value上。

> <s:textfield value="%{#request.msg}"/>

 

* { }中值用''引起来,此时不再是ognl表达式,而是普通的字符串

> 例如:<s:property value="%{'#request.msg'}"/>

 

3. $ 符号的用法

* 在配置文件中可以使用OGNL表达式,例如:文件下载的配置文件。

<action name="download1" class="cn.itcast.demo2.DownloadAction">

<result name="success" type="stream">

<param name="contentType">${contentType}</param>

<param name="contentDisposition">attachment;filename=${downFilename}</param>

</result>

</action>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值