`
awfrun
  • 浏览: 79857 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

struts2 OGNL详细操作(#,%,$)

阅读更多
<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>OGNL表达式语言学习</title>
</head>
<body>
	<ol>
		
		<li> 访问值栈中action的普通属性: username = <s:property value="username"/> </li>
		
		<li> 访问值栈中普能对象的(get/set):<s:property value="user.age"/> | <s:property value="user['age']"/> || <s:property value="user[\"age\"]"/>
		<!-- 对于user对象是否由struts创建,只要你有传参给它(&user.age=10)就会自动创建,也可以在action 手动new -->
		
		<li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
		
		<li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
		
		<li>访问值栈中action的普通方法:<s:property value="m()" /></li>
		
		<li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
		<!-- 类名方法名前加@, 2.1版本的要加 constant name="struts.ognl.allowStaticMethodAccess" value="true"  -->
		
		<li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
		
		<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
		
		<hr />
		<li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
		<hr />
		
			
		<li>访问List:<s:property value="users"/></li>
		<li>访问List中某个元素:<s:property value="users[1]"/></li>
		<li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>
		<li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
		
		<li>访问Set:<s:property value="dogs"/></li>
		<li>访问Set中某个元素:<s:property value="dogs[1]"/></li>
		
		<li>访问Map:<s:property value="dogMap"/></li>
		<li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>
		<li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
		<li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
		<li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
		<hr />
		
		<li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li>
		<li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li>
		<li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li>
		<li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>
		<hr />
		
		<li>[]:<s:property value="[0].username"/></li>
		
	</ol>
	
	<s:debug></s:debug>
</body>
</html>

 

 

 

 

 下面说明一下几个关键点:"{}"符节可以看做是一个集合;?#表示过滤users.{?#this.age==1}取出来是一个集合.

^#表示第一个,$#表示最后一个,这有点像正则表达式.

<s:property value="[0].username"/>这个有点意思,在值栈中在栈顶永远是action,栈底是com.opensymphony.xwork2.DefaultTextProvider,这

样好像对我们没有多大多处啊?其实我们有时值栈可能会有多个action,这样就对我们有用了,可以起来精确定位.(在我们使用chain时存在多

个action).

 

使用一项技术首先要了解它的基本功能与操作: 有时我们会用到 # % $ '',下面说明一下它们各自的使用方法;

1.<s:property value="users"/> 像这个表过式value="users" 其实它已经使用了OGNL,你也可以这样写
value="%{users}",( %将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用),一般可以不用就
不要用等到要用时再用,像include标签的value为string类型,这时我们就要用%强制转换成OGNL.

2."#"其实是OGNL操作actioncontext的符号,可以用这个标签<s:debug></s:debug>来查看哪些是ValueStack哪些是actionContext.

3.有时你不想用到OGNL,你可以有''来操作,例:<s:property value="'name'"/> 这样就不会使用到OGNL,只会输出name;

4.$符号用于i18nstruts配置文件

 

附件:尚学堂的例子

 

 

1
1
分享到:
评论

相关推荐

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

    Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势: 1、 支持对象方法调用,如xxx.doSomeSpecial(); 2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@...

    Struts2全解Struts2全解

    Struts2 软件下载 Struts2 比较重要的类 操作步骤及框架配置 struts运行机制 2、简单的struts2程序 3、struts2配置文件 4、cion主要内容 Namespace、自定义Action、路径问题、通配符、包含模块配置文件、默认...

    OGNL表达式struts2标签

    2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名 | 值名],例如: @java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME; 3、支持赋值操作和表达式串联,...

    Struts 2中的OGNL教程

    OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言

    Struts2中的参数传递

    1. 对OGNL操作进行封装,完成OGNL表达式所表示的值到Java对象的值传递机制 2. 在参数传递的过程中,做恰当的类型转化,保证页面上的字符串能够转化成各 式各样的Java对象 接下来,通过四个不同的角度,来具体讲述...

    Struts2环境配置与基本操作演示

    Struts2入门介绍、环境配置与基本操作演示,包含OGNL,值栈与域概念

    struts2必须包

    struts2必须包,commons-fileupload-1.3.1.jar 实现文件上传包,commons-io-2.2.jar 用来处理IO的一些工具类包,commons-lang3-3.1.jar 提供一些基础的、通用的操作和处理,如自动生成toString()的结果、自动实现...

    Struts2 in action中文版

    5.2 OGNL和Struts 2 85 5.2.1 OGNL是什么 85 5.2.2 OGNL如何融入框架 87 5.3 内建的类型转换器 89 5.3.1 立即可用的类型转换器 89 5.3.2 使用OGNL表达式从表单字段名映射到属性 90 5.4 自定义类型转换 101 5.4.1 ...

    最新Struts2 jar 架包

    整理了1个上午 Oracle+Weblogic,主要内容如下: struts2-core-2.1.8.jar Struts2的核心包 struts2-json-plugin-2.1.8.jar json进行异步...ognl-2.7.3.jar OGNL表达式语言,struts2支持该EL antlr-2.7.6.jar HQL解析

    struts项目调优需要的ognl2.7的jar包

    ognl2.7相对于2.6在性能上有了“显著”的提升.所以该jar包能对struts2的调优有很大帮助,尤其是ValueStack中的操作比较多的情况下。

    Struts 2.1.8_学习源码

    Struts2默认支持OGNL、JSTL、Groovy和Velcity表达式 Struts2_04ActionResultType : Struts2关于Action跳转类型的应用 对各种不同的跳转类型使用的实例 Struts2_05Interceptor : Struts2拦截器的使用 Struts2_06...

    Ognl参考手册pdf

    Ognl参考手册pdf 官方英文版 第一章 介绍 第二章 发展史 第三章 语法 第四章 表达式 第五章 强制对象类型转换 附录 OGNL语言参考 OGNL操作符

    Struts2中关于ValueStack的一些操作

    2、 EL,全称Express Language,即表达式语言。不要被语言吓倒,它是简单的对象导航语言。有字符串(例如:方法名)和特殊字符组成(例如用.表示调用对应的属性方法)。通过EL,我们可以存、取对象数据,而且还可以...

    OGNL表达式语言.txt

    OGNL表达式语言: 相对EL表达式,它提供了平时我们需要的一些功能,如: ...另外OGNL会设定一个根对象(root对象),在Struts2中根对象是ValueStack。 如果访问根对象中的对象的属性,则可以省略#命名空间。

    struts2与hibernate整合单表增删改查

    struts2与hibernate整合,用户注册,单表增删改查,OGNL,数据库采用MySQL,附详细操作步骤截图,源代码,以及相关配置信息,超详细,绝对适合初学者

    struts2的数据库操作和文件的上传下载

    由于文件比较大,所以就没有上传lib下面的架包,需要的可以自己去apache网站下载struts2的架包fileupload,io|logging|freemarker|mysql-connector-java|ognl|struts2-core|xwork 这些包。数据库在项目中。自己导入...

    Java开发技术

    struts2 中 OGNL表达式的使用 GNL是Object Graph Navigation Language的简称,详细相关的信息可以参考:http://www.ognl.org。这里我们只涉及Struts2框架中对OGNL的基本支持。 Struts 2默认的表达式语言是OGNL,...

    struts2经典教程

    OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言; JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言; Groovy,基于Java平台的动态语言,它具有时下比较...

    struts2传参

    struts2中使用ognl表达式语言传参的方法,简化操作,通过jsp页面传递到Action中

Global site tag (gtag.js) - Google Analytics