kelly的小空间
BlogJava
首页
新随笔
联系
聚合
管理
随笔 - 72 文章 - 28 trackbacks - 0
<
2014年1月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
(66)
java(32)
java 框架(14)
Linux(10)
MYSQL(1)
oracle(5)
others(4)
随笔档案
(72)
2015年10月 (2)
2015年6月 (1)
2015年3月 (1)
2014年11月 (2)
2014年1月 (12)
2013年12月 (7)
2013年11月 (3)
2013年4月 (1)
2013年2月 (1)
2011年10月 (9)
2011年9月 (3)
2011年6月 (1)
2011年3月 (1)
2011年2月 (1)
2010年12月 (1)
2009年5月 (2)
2008年1月 (2)
2007年12月 (2)
2007年9月 (1)
2007年4月 (1)
2007年3月 (2)
2007年1月 (2)
2006年12月 (5)
2006年11月 (3)
2005年8月 (3)
2005年6月 (3)
文章档案
(19)
2011年4月 (2)
2011年2月 (1)
2010年12月 (2)
2010年11月 (5)
2010年10月 (3)
2010年8月 (1)
2010年7月 (4)
2006年11月 (1)
收藏夹
什么是“双低”个股 封起De日子
搜索
最新评论
1. re: Spring MVC使用HttpClient返回json报406错误解决办法
iii
--ii
2. re: 用java实现打印功能
请问可不可以发一个详细点的用远程网络打印机打印的到我邮箱562428092@qq.com
--李丽
3. re: JDK6.0下载,JDK1.5下载,eclipse3.2中文版下载 linux安装配置jdk1 (转载)
下载jdk1.5的中文版网址?
--学习生活9484
4. re: JDK6.0下载,JDK1.5下载,eclipse3.2中文版下载 linux安装配置jdk1 (转载)
评论内容较长,点击标题查看
--学习生活9484
5. re: ASP自动下载图片
评论内容较长,点击标题查看
--sysdzw
阅读排行榜
1. 用java实现打印功能(57289)
2. java处理日期时间 相加减大全(28787)
3. Spring MVC使用HttpClient返回json报406错误解决办法(14134)
4. JDK6.0下载,JDK1.5下载,eclipse3.2中文版下载 linux安装配置jdk1 (转载)(6017)
5. Maven创建An internal error occurred during: "Retrieving archetypes:". Java heap space(5297)
评论排行榜
1. 用java实现打印功能(14)
2. JDK6.0下载,JDK1.5下载,eclipse3.2中文版下载 linux安装配置jdk1 (转载)(4)
3. ASP自动下载图片(3)
4. JSP中文乱码解决方案-Tomcat5.0版(1)
5. 实现IE全屏显示(1)
OGNL表达式struts2标签“%,#,$”
一、什么是OGNL,有什么特点?
OGNL(Object-Graph
Navigation
Language),大概可以理解为:对象图形化导航语言。是一种可以方便地操作对象属性的开源表达式语言。OGNL有如下特点:
1
、支持对象方法调用,形式如:objName.methodName();
2
、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名
|
值名],例如:
@java
.lang.String
@format
(
'foo
%s'
,
'bar'
)或
@tutorial
.MyConstant
@APP_NAME
;
3
、支持赋值操作和表达式串联,例如:
price=
100
,
discount=
0.8
,
calculatePrice(),这个表达式会返回
80
;
4
、访问OGNL上下文(OGNL
context)和ActionContext;
5
、操作集合对象。
二、使用OGNL表达式
OGNL要结合struts标签来使用。由于比较灵活,也容易把人给弄晕,尤其是“%”、“#”、“$”这三个符号的使用。由于$广泛应用于EL中,这里重点写%和#符号的用法。
1
、“#”符号有三种用途:
(
1
)、访问非根对象(struts中值栈为根对象)如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'
}。
(
2
)、用于过滤和投影(projecting)集合,如:
books.{?#
this
.price>
35
}
books.{?#
this
.price>
35
}
(
3
)、构造Map,如:
#{
'foo1'
:
'bar1'
,
'foo2'
:
'bar2'
}
#{
'foo1'
:
'bar1'
,
'foo2'
:
'bar2'
}这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个map的值可以这样写:
<s:property
value=
"#myMap['foo1']"
/>
<s:property
value=
"#myMap['foo1']"
/>
2
、“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。很有点类似javascript里面的eval_r()功能,例如
:
var
oDiv
=
eval_r(
"document.all.div"
+index)
var
oDiv
=
eval_r(
"document.all.div"
+index)
当index变量为
1
时,语句就会被当作var
oDiv
=
document.all.div1
var
oDiv
=
document.all.div1来执行。%{}就是起这个作用。举例:
<s:set
name=
"myMap"
value=
"#{'key1':'value1','key2':'value2'}"
/>
<s:property
value=
"#myMap['key1']"
/>
<s:url
value=
"#myMap['key1']"
/>
<s:set
name=
"myMap"
value=
"#{'key1':'value1','key2':'value2'}"
/>
<s:property
value=
"#myMap['key1']"
/>
<s:url
value=
"#myMap['key1']"
/>
上面的代码第
2
行会在页面上输出“value1”,而第
3
行则会输出
"#myMap['key1']"
这么一个字符串。
如果将第
3
行改写成这样:
<s:url
value=
"%{#myMap['key1']}"
/>
<s:url
value=
"%{#myMap['key1']}"
/>
则输出为“value1”。
这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签“看不懂”类似“#myMap[
'key1'
]”的语句时,就要用%{}来把这括进去,“翻译”一下了。
3
、“$”有两种用途
(
1
)、在国际化资源文件中,引用OGNL表达式。
(
2
)、在Struts
2
配置文件中,引用OGNL表达式:
<action
name=
"saveUser"
class
=
"userAction"
method=
"save"
>
<result
type=
"redirect"
>listUser.action?msg=${msg}</result>
</action>
<action
name=
"saveUser"
class
=
"userAction"
method=
"save"
>
<result
type=
"redirect"
>listUser.action?msg=${msg}</result>
</action>
posted on 2014-01-08 13:58
kelly
阅读(200)
评论(0)
编辑
收藏
所属分类:
java 框架
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
Struts2整合Spring从xml到注解
Spring注解讲解
Struts2.3+Spring3.2的整合
No configuration found for the specified action
简单Struts2实例(入门级)-转
Struts2基于注解的Action配置
Struts2教程1:第一个Struts2程序 -转
Ibatis+spring整合集成开发-【原创】
struts2底层中如何将表单值传入Action
OGNL表达式struts2标签“%,#,$”