- 浏览: 185382 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
masuweng:
好好
与ant结合使用yguard -
lenomon:
你也可以看看这个,Linux同步时间命令ntpdate
Linux与远程时间服务器同步 -
木叶之舟:
我这里有个疑问,就是我想通过拦截外键的属性,该怎样实现呢?
比 ...
springside的filter查询 -
dongbiying:
好!
与ant结合使用yguard -
javaray:
遨豪(大连)科技有限公司自2007年与Liferay,Inc合 ...
Liferay的CAS SSO实现思路
原文地址:http://www.blogjava.net/max/archive/2007/04/28/114417.html
OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="xx" /> 等。大家经常遇到的问题是#、%和$这三个符号的使用。下面我想通过例子讲述这个问题:
首先新建名为Struts2_OGNL的Web工程,配置开发环境。之前很多朋友在使用Struts 2的过程中都遇到乱码问题。当然乱码问题由来已久,而且涉及多方面的知识,所以并非三言两语可以说明白,而且互联网上也已经有很多这方便的文章,大家可以 Google一下。不过,如果你在开发的过程,多注意一下,避免乱码问题也不难。乱码多数是由于编码与解码所使用的方式不同造成的,所以我建议大家将编码 方式都设为“utf-8”,如<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> 。另外,在配置web.xml时使用ActionContextCleanUp过滤器(Filter),如下面代码所示:
< web-app id ="WebApp_9" version ="2.4"
xmlns ="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
< display-name > Struts 2 OGNL </ display-name >
< filter >
< filter-name > struts-cleanup </ filter-name >
< filter-class >
org.apache.struts2.dispatcher.ActionContextCleanUp
</ filter-class >
</ filter >
< filter-mapping >
< filter-name > struts-cleanup </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
< filter >
< filter-name > struts2 </ filter-name >
< filter-class >
org.apache.struts2.dispatcher.FilterDispatcher
</ filter-class >
</ filter >
< filter-mapping >
< filter-name > struts2 </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
< welcome-file-list >
< welcome-file > index.html </ welcome-file >
</ welcome-file-list >
</ web-app >
清单1 WebContent/WEB-INF/web.xml
“#”主要有三种用途:
- 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
名称 作用 例子 parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter("id") request 包含当前HttpServletRequest的属性(attribute)的Map #request.userName相当于request.getAttribute("userName") session 包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName") application 包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName") attr 用于按request > session > application顺序访问其属性(attribute) #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止 - 用于过滤和投影(projecting)集合,如books.{?#this.price<100} ;
- 构造Map,如#{'foo1':'bar1', 'foo2':'bar2'} 。
下面让我们它们的具体写法,首先是Action类代码:
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware;
import tutorial.model.Book;
import com.opensymphony.xwork2.ActionSupport;
public class OgnlAction extends ActionSupport implements ServletRequestAware, SessionAware, ServletContextAware {
private static final long serialVersionUID = 1L ;
private HttpServletRequest request;
private Map < String, String > session;
private ServletContext application;
private List < Book > books;
public void setServletRequest(HttpServletRequest request) {
this .request = request;
}
@SuppressWarnings( " unchecked " )
public void setSession(Map session) {
this .session = session;
}
public void setServletContext(ServletContext application) {
this .application = application;
}
public List < Book > getBooks() {
return books;
}
@Override
public String execute() {
request.setAttribute( " userName " , " Max From request " );
session.put( " userName " , " Max From session " );
application.setAttribute( " userName " , " Max From application " );
books = new LinkedList < Book > ();
books.add( new Book( " 978-0735619678 " , " Code Complete, Second Edition " , 32.99 ));
books.add( new Book( " 978-0596007867 " , " The Art of Project Management " , 35.96 ));
books.add( new Book( " 978-0201633610 " , " Design Patterns: Elements of Reusable Object-Oriented Software " , 43.19 ));
books.add( new Book( " 978-0596527341 " , " Information Architecture for the World Wide Web: Designing Large-Scale Web Sites " , 25.19 ));
books.add( new Book( " 978-0735605350 " , " Software Estimation: Demystifying the Black Art " , 25.19 ));
return SUCCESS;
}
}
清单2 src/tutorial/action/OgnlAction.java
以上代码分别在request、session和application的范围内添加“userName”属性,然后再在JSP页面使用OGNL将 其取回。我还创建了Book对象的列表用于演示“用于过滤和投影(projecting)集合”的功能,至于Book的代码大家可以在我前一文章《在Struts 2中实现CRUD 》看到。
下面是Ognl.jsp的代码,内容如下:
<% @ 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 > Struts OGNL Demo </ title >
</ head >
< body >
< h3 > 访问OGNL上下文和Action上下文 </ h3 >
< p > parameters: < s:property value ="#parameters.userName" /></ p >
< p > request.userName: < s:property value ="#request.userName" /></ p >
< p > session.userName: < s:property value ="#session.userName" /></ p >
< p > application.userName: < s:property value ="#application.userName" /></ p >
< p > attr.userName: < s:property value ="#attr.userName" /></ p >
< hr />
< h3 > 用于过滤和投影(projecting)集合 </ h3 >
< p > Books more than $35 </ p >
< ul >
< s:iterator value ="books.{?#this.price > 35}" >
< li >< s:property value ="title" /> - $ < s:property value ="price" /></ li >
</ s:iterator >
</ ul >
< p > The price of "Code Complete, Second Edition" is: < s:property value ="books.{?#this.title=='Code Complete, Second Edition'}.{price}[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 >
清单3 WebContent/Ognl.jsp
以上代码值得注意的是“<s:property value="books.{?#this.title=='Code Complete, Second Edition'}.{price}[0]"/> ”,因为“books.{?#this.title=='Code Complete, Second Edition'}.{price} ”返回的值是集合类型,所以要用“[索引]”来访问其值。
最后是Struts 2的配置文件struts.xml,内容如下:
<! DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
< struts >
< constant name ="struts.devMode" value ="true" />
< package name ="Struts2_OGNL_DEMO" extends ="struts-default" >
< action name ="Ognl" class ="tutorial.action.OgnlAction" >
< result > /Ognl.jsp </ result >
</ action >
</ package >
</ struts >
清单4 src/struts.xml
发布运行应用程序,结果如下所示:
“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。例如在Ognl.jsp中加入以下代码:
< h3 > %的用途 </ h3 >
< p >< s:url value ="#foobar['foo1']" /></ p >
< p >< s:url value ="%{#foobar['foo1']}" /></ p >
清单6 演示%用途的代码片段
刷新页面,结果如下所示:
清单7 示例运行结果2
“$”有两个主要的用途
- 用于在国际化资源文件中,引用OGNL表达式,例子请参考《在Struts 2.0中国际化(i18n)您的应用程序 》
- 在Struts 2配置文件中,引用OGNL表达式,如
< action name ="AddPhoto" class ="addPhoto" >清单8 演示$用途的代码片段
< interceptor-ref name ="fileUploadStack" />
< result type ="redirect" > ListPhotos.action?albumId=${albumId} </ result >
</ action >
总结
OGNL是一种功能很大的表达式语言,熟悉它可以使我们的开发变得更快捷。
发表评论
-
用exp/imp远程操作数据库
2012-03-27 10:55 1179在http://icyheart.iteye.com/bl ... -
Eclipse for JEE 3.5.2 maven插件安装
2012-03-27 10:56 2592先安装gef插件,然后安装subclipse插件,最后安装m2 ... -
onkeypress,onkeydown,onkeyup区别 和 javascript event.keycode值大全
2010-08-05 17:32 4905onkeypress是在用户按下并放开任何字母数字键时发生 ... -
国王和100个囚犯
2010-01-15 11:27 921看到一个关于算法的帖子,总结了下跟帖的算法发表一下: 原贴地 ... -
搞懂java中的synchronized关键字
2009-12-12 17:55 18441、synchronized关键字的作用域有二种: 1 ... -
JAVA 30个基本知识
2009-12-12 17:53 8561.OOP中唯一关系的是对 ... -
精妙的SQL語句
2009-12-12 17:51 962说明:复制表(只复制结构,源表名:a 新表名:b) SQL: ... -
JPA & Hibernate 注解
2009-11-25 18:05 1184原文地址:http://blog.csdn.net/eastl ... -
Servlet监听器详解
2009-11-11 16:56 1249原文地址:http://www.21jn.net/html/8 ... -
Servlet过滤器介绍之原理分析
2009-11-11 16:31 1360原文地址:http://zhangjunhd.blog.51c ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解
2009-11-11 14:46 1079原文地址:http://sunxboy.iteye.com/b ... -
jsp常见问题
2009-11-11 14:14 1423原文地址:http://liujinpan75.iteye.c ... -
OGNL表达式语言介绍
2009-11-09 18:08 1989原文地址:http://darkranger.iteye.co ... -
jmail收发邮件
2009-10-28 17:09 1714jmail收发邮件,发送邮件基于smtp协议,收邮件基于pop ... -
程序员每天该做的8件事
2009-09-23 15:10 904不重视细节,如何谈得上成功? 1)程序员每天总结自己一天 ... -
jasperreports-1.3.3与iReport1.3.3初级使用
2009-09-14 17:43 2688这几天多在用jasperreports写下一点入门的东西。这里 ... -
ant使用
2009-08-07 15:16 1177参考地址: http://www.blogjava. ... -
Alpha、Beta、RC、GA版本的区别
2009-08-05 11:08 1400Alpha、Beta、RC、GA版本的区别 ... -
基本排序
2009-07-15 12:20 899package zyio; public class Tes ... -
在TOMCAT下配置工程的默认访问
2009-07-10 14:09 3281对工程的部署一般是将工程的压缩文件放在tomcat安装目录的w ...
相关推荐
在这个“Struts2 OGNL用法项目”中,我们将深入探讨OGNL(Object-Graph Navigation Language),它是Struts2中一个强大的表达式语言,用于在模型对象和视图之间进行数据绑定和表达式计算。 OGNL是Struts2的核心组件...
接下来,我们将详细介绍 `siterator` 标签的使用和 OGNL 的用法。 1. **siterator 标签的属性**: - **value**:这是必需的属性,用于指定要迭代的集合。可以是直接的值,如数组或 Map,也可以是从 Action 中返回...
本篇文章将深入讲解`s:iterator`标签的使用及其与OGNL(Object-Graph Navigation Language)的结合应用。 1. **s:iterator标签的基本使用** - **value属性**:该属性指定需要迭代的集合。它可以是数组、列表、Map...
这篇文档详细讲解了 `s:iterator` 标签的使用方法以及 OGNL(Object-Graph Navigation Language)的用法。 1. **s:iterator 标签的基本属性** - `value`:这个属性是必需的,用于指定要迭代的集合。它可以是一个...
这个方法是OGNL最基础的用法,可以直接解析并执行OGNL表达式。 2. `Ognl.setValue(expression, context, root, value)`:与`getValue`相反,这个方法用于设置`root`对象中由`expression`指定的属性的值为`value`。...
本篇将详细介绍OGNL的使用方法及其核心概念。 一、OGNL的基础知识 1. **表达式语法**:OGNL表达式通常由对象名、点号和属性名组成,例如`user.name`,表示获取`user`对象的`name`属性。也可以通过索引访问集合元素...
### Struts2中OGNL的使用详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现...
本篇笔记主要介绍了在Struts2中使用OGNL的一些基本用法。 首先,OGNL可以用来获取不同范围内的属性值。在Java Web开发中,有四种常见的作用域:Request、Session、Application和Page。在示例代码中,`<s:property>`...
#### 二、OGNL的基本用法 在Struts2框架中,OGNL表达式被广泛应用于视图层,比如在JSP页面中用来获取数据。OGNL表达式的语法简洁明了,例如: - **直接调用方法**:`xxx.sayHello()`。 - **访问静态方法和常量**:...
赠送jar包:ognl-3.2.21.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系...用法:OGNL是通常要结合Struts 2的标志一起使用。主要是#、%和$这三个符号的使用;
它有很多特点,例如支持对象方法调用、类静态的方法调用和值访问、赋值操作和表达式串联、访问 OGNL 上下文和 ActionContext、操作集合对象等。 在 Struts2 中,OGNL 表达式需要结合 Struts 标签来使用。其中,“%...
4. **文档查阅**:查阅官方文档和社区资源,了解每个版本的新特性和使用方法,以便充分利用其功能。 总之,OGNL是一个强大且灵活的工具,用于在Java应用中进行对象属性的导航和操作。正确理解和使用不同版本的OGNL ...
3. 动态方法调用:OGNL支持动态方法调用,允许开发者根据运行时的条件选择调用哪个方法,增加了代码的可扩展性。 4. EL(表达式语言)增强:OGNL作为Struts2的默认EL,提供更丰富的功能,比如可以方便地访问集合、...
此外,提供的帮助文档将指导你了解OGNL的所有语法特性、最佳实践和使用示例。 在Struts2框架中,OGNL是默认的表示层语言,用于视图与模型之间的数据绑定。它使得视图可以直接引用模型中的数据,简化了MVC架构中的...
在Java开发中,尤其是Web应用框架如Struts2和Hibernate中,OGNL被广泛使用。它允许开发者以简洁的方式访问和操作对象的属性,甚至包括深层次的对象图导航。 **OGNL的基础概念:** 1. **表达式**:OGNL的核心是其...
2. **方法调用**:除了属性访问,OGNL还可以执行对象的方法,这在处理复杂的业务逻辑时非常有用。 3. **表达式计算**:OGNL支持表达式计算,比如数学运算、逻辑判断等,这使得动态计算成为可能。 4. **列表和集合...
供集合使用的伪属性 与Java语言不同的操作符 赋值与取值 5. 对象到数据类型的强制转换 将对象解释为布尔值 将对象解释为数值 将对象解释为整数 将对象解释为集合 附录A. OGNL语言参考 操作符 表格一览 3.1...
3. **上下文(Context)**:OGNL在解析表达式时会使用一个上下文对象,其中包含了变量、方法和对象的映射。开发者可以将任何对象放入上下文中,然后通过表达式直接访问它们。 二、OGNL的语法特性 1. **属性访问**:...
2. **动态方法调用**:除了属性访问,OGNL还支持动态方法调用,例如`list.add(item)`,可以在运行时根据表达式找到并调用合适的方法。 3. **上下文映射**:OGNL使用一个上下文映射(Context Map),其中存储了变量...