struts2中s:iterator 标签的使用详解 及 OGNL用法 (转载)
2011-02-11 14:23
736 查看
简单
的
demo
:
s:iterator
标签
有
3
个属性:
value
:被迭代的集合
id
:指定集合里面的元素的
id
status
迭代元素的索引
1:jsp
页
面定
义
元素写法
数
组
或
list
<s:iterator value="{'1','2','3','4','5'}" id='number'>
<s:property value='number'/>A
</s:iterator>
打印
结
果
为
: 1A2A3A4A5A
2:
索引的用法
如果指定了
status
,
每
次的迭代数据都有
IteratorStatus
的
实
例,它有以下几个方法
int getCount()
返回当前迭代了几个元素
int getIndex()
返回当前元素索引
boolean isEven()
当然的索引是否偶数
boolean isFirst()
当前是否第一个元素
boolean isLast()
boolean isOdd()
当前元素索引是否奇数
<s:iterator value="{'a','b','c'}" id='char' status='st'>
<s:if test="#st.Even">
现
在的索引是奇数
为
:<s:property value='#st.index'/>
</s:if>
当前元素
值
:
<s:property value='char'/>
</s:iterator>
3
:遍
历
map
value
可以直接定
义为
:
value="#{"1":"a","2":"b"}"
每
个元素以都好隔
开
。元素之
间
的
key
和
value
冒号隔
开
value
也可以是数据
栈
里面的
java.util.Map
对
象
遍
历
写法如下:
<s:iterator value="map" id="id" status="st">
key : <s:property value='key'/>
value:<s:property vlaue='value'/>
</s:iterator>
当然
key
和
value
都可以使
java
的
Object
3
:遍
历
数据
栈
.
简单
的
List
类
,
List<Attr>
class Attr{String attrName;String getAttrName(){return "123";}}
<s:iterator value="label" id="id">
<s:property value="#id.attrName" />
</s:iterator>
当然
value
还
可以写成
value="%{label}" label
可以有
.
操作
label
的属性
List
可以写成
value="%{label.list}"
相当于:
getLabel().getList();
4
:遍
历
2
个
list
;
List<AttrName> attrN {color,size,style}
List<AttrValue> attrV {red,20,gay}
这
2
个
list
的元素是一一
对应
的,一个
attrN
对应
一个
attrV
<s:iterator value="%{attrN }" id="id" status="status">
index is : <s:property value='status.index'/>
attrName is : <s:property value='id'/> or <s:property value='%{id}'/>
attrName is : <s:property value='%{attrV[#status.index]}'/>
</s:iterator>
<s:bean name="org.apache.struts2.util.Counter" id="counter">
<s:param name="first" value="5" />
<s:param name="last" value="10" />
<s:iterator>
counter:<s:property/>
</s:iterator>
</s:bean>
这
个
标签
主要的的作用就是迭代出集合。。
value
属性表示需要跌代
显
示出来的
值
。
status
属性,又来保存迭代
时
的一些状
态值
。
注:
1.
如果需要引用
valueStack
中的
值
,需要使用
这样
的形式。
<s:iterator value="#userList" /> //userList
在
action
部分被保存在
Request
中,所以使用
#
加属性名来引用
值
。
2.
如果集合的
值
是通
过
action
的方法,假
设
我
们
的
action
中有一个
getListMenu
方法,返回一个
List
集合。
我
们
可以使用如下的形式来引用
这
个集合,并用
s:iterator
来
输
出。
<s:iterator value="listMenu" />
3.iterator
的
value
使用定
义
好的方式,如:
<s:iterator value="{1,2,3,4}" /> //
这样
跌代
输
出的
值
就是
1.2.3
.4
这
四个
值
。
二、
iterator
中
输
出具体
值
,如果,在上面我
们
的
list
中的
对
象,有两个属性,都是
String
类
型,一个是
name,
一个是
url
。
我
们
可以
这样
来引用。
1. <s:property value="name" /> //
这样
我
们
将可以
输
出跌代
对
象的
name
属性
值
。
2.
如果我
们
希望使用
<s:url />
来将跳
转过
后的
url
进
行
处
理,
该
如何来做?
<s:url
value="%{url}"/>
//%{}ognl
的表达式,
这样
的
值
能
够
将
url
的
值进
行
<s:url/>
的
处
理
实际
上就是
转为绝对
路径。
这样
,我
们
就可以
对
付一些因跳
转换产
生的路径
问题
。
原因:因
为
<s:iteratotr />
以后,当前的
对
象
应该
就在
ValueStack
顶
部了,
这样
当然的
url
实际
上就是
对
象的
url
属性了
三、使用
ognl
输
出
对应
的
值
。
<s:textfield name="loginName" value="%{#request.loginNames}"/>
使用此表达式,会生成一个文本框,并且,如果
request.attribute
中有
loginNames
属性,将会做
为
些文本框的默
认值
。
如果只使用
#request.loginNames
在
struts2
的
标签
内部,是不会
显
示任何
值
的,注意外面加上的
%{}
附号,才会被正常的使用。
如果希望如
EL
语
言一
样
直接
输
出文件,如在一个
<a></a>
之
间
的
innerHTML
文本
为
#request.loginNames
的
值
,我
们
只要使用:
<s:property value="#request.loginNames" />
使可以正常使用!
注:
1.${}
是
EL
语
言的
%{}
这样
的形式是
ognl
表
过
式
语
言的,在
struts2
的
标签
内部,使用
%{}
这样
的形式,在
标签
外部可以使用
${}EL
语
言的方式。如果在
struts2
的
标签
内部使用
${}
这样
的方式,会出
现
以下的
错误
提示:
According to TLD or attribute directive in tag file, attribute value does not accept any expressions
2.
很多
时
候,我
们
使用
struts2
的一些
标签
,属性是需要接受集合的,如果集合是保存在
request,session
,或者是
值栈
(
非根
对
象的
栈顶
)
,可以使用
#
变
量名的方式,如果
获
取的
值
是在
Action
中通
过
特定的方法来
获
取,就需要使用如
value="userList"
这样
的方式,只是去掉了前面的
#
。
struts2
中的
OGNL
用法
User
对
象属性
获
取
如
User
中有
username
和
password
字段
获
取
username
属性
<s:property value="user.username" />
获
取
password
属性
<s:property value="user.password" />
若
User
中又包含定
义
了
address
对
象,
address
对
象中包含有
addr
属性,
则
可以
这样访问
获
取
addr
属性
<s:property value="user.address.addr" />
若
User
中
还
包含一个
get()
的普通方法,可以
这样调
用
<s:property value="user.get()" />
以上是
调
用
值栈
中
对
象的普通方法,
user
为值栈
中的
对
象
调
用
action
中的静
态
方法
get()
,普通方法不能直接
调
用
<s:property value="@com.netshuai.action.ManagerAction@get()" />
以上
为调
用非
值栈
中的静
态
方法
调
用
JDK
中
类
的静
态
方法
<s:property value="@java.lang.Math@floor(32.56)" />
上例也可写成
<s:property value="@@floor(32.56)" />
,省略前面的
类则
默
认
使用
java.lang.Math
类
,其他
类
不可省略
调
用普通
类
中的静
态
属性
<s:property value="@com.netshuai.model.Address@city" />
address
中的
city
静
态
属性要用
public
声明
调
用普通
类
的构造方法,如构造方法
为
public User(String username)
{
this.username=username;
}
调
用方法
为
<s:property value="new com.netshuai.model.User('hello').username" />
,
则
返回
username
值为
hello
获
取
List<s:property value="list" />
获
取
List
中的某一个元素
<s:property value="list[0]" />
获
取
List
的大小
<s:property value="list.size" />
获
取
Set<s:property value="set" />
无法
获
取
Set
中的某一个元素,因
为
Set
没有
顺
序
获
取
Map<s:property value="map" />
获
取
Map
中所有
key
的
值
<s:property value="map.keys" />
获
取
Map
中所有
value
的
值
<s:property value="map.values" />
获
取
Map
中的某一个元素
<s:property value="map['k1']" />
获
取
List
所有
对
象
<s:property value="listObject" />
,需要重写
toString()
方法才能正常
显
示
对
象的
值
利用投影
获
取
List
中所有
对
象的
username
属性
<s:property value="listObject.{username}" />
利用投影
获
取
List
中第一个
对
象的
username
属性
<s:property value="listObject.{username}[0]" />
利用
选择获
取
List
中年
龄
大于
30
的
对
象
<s:property value="listObject.{?#this.age>30}" />
利用
选择获
取
List
中年
龄
大于
30
的
对
象的
username<s:property value="listObject.{?#this.age>30}.{username}" />
利
用
选择获
取
List
中年
龄
大于
30
的第一个
对
象的
username<s:property value="listObject.{?#this.age>30}.{username}[0]" />
或
<s:property value="listObject.{^#this.age>30}.{username}" />
利用
选择获
取
List
中年
龄
大于
30
的最后一个
对
象的
username<s:property value="listObject.{$#this.age>30}.{username}" />
获
取
parameters
中的属性
<s:property value="#parameters.name" />
获
取
request
中的属性
<s:property value="#request.name" />
获
取
session
中的属性
<s:property value="#session.name" />
获
取
application
中的属性
<s:property value="#application.name" />
<s:property value="#attr.name" />
按
顺
序遍
历
上面四个
对
象,然后返回首先找到的
值
%{}
可以取出存在
值
堆
栈
中的
Action
对
象,直接
调
用它的方法,如
%{getText('key')}
可以取出国
际
化信息
${}
可以用在国
际
化
资
源文件中和
struts2
配置文件中
使用
top
获
取
值栈
中第二个
对
象
<s:property value="[1].top.user"/>
使用
top
获
取
值栈
中第二个
对
象的属性
<s:property value="[1].user"/>
调
用
值栈
中
action
的静
态
方法
get()<s:property value="@vs@get()"/>
,
vs
也可写做
vs1
调
用
值栈
中第二个
action
的静
态
方法
get()<s:property value="@vs2@get()"/>
将一个
对
象放入
值栈
ActionContext.getContext().getValueStack().push(user);
的
demo
:
s:iterator
标签
有
3
个属性:
value
:被迭代的集合
id
:指定集合里面的元素的
id
status
迭代元素的索引
1:jsp
页
面定
义
元素写法
数
组
或
list
<s:iterator value="{'1','2','3','4','5'}" id='number'>
<s:property value='number'/>A
</s:iterator>
打印
结
果
为
: 1A2A3A4A5A
2:
索引的用法
如果指定了
status
,
每
次的迭代数据都有
IteratorStatus
的
实
例,它有以下几个方法
int getCount()
返回当前迭代了几个元素
int getIndex()
返回当前元素索引
boolean isEven()
当然的索引是否偶数
boolean isFirst()
当前是否第一个元素
boolean isLast()
boolean isOdd()
当前元素索引是否奇数
<s:iterator value="{'a','b','c'}" id='char' status='st'>
<s:if test="#st.Even">
现
在的索引是奇数
为
:<s:property value='#st.index'/>
</s:if>
当前元素
值
:
<s:property value='char'/>
</s:iterator>
3
:遍
历
map
value
可以直接定
义为
:
value="#{"1":"a","2":"b"}"
每
个元素以都好隔
开
。元素之
间
的
key
和
value
冒号隔
开
value
也可以是数据
栈
里面的
java.util.Map
对
象
遍
历
写法如下:
<s:iterator value="map" id="id" status="st">
key : <s:property value='key'/>
value:<s:property vlaue='value'/>
</s:iterator>
当然
key
和
value
都可以使
java
的
Object
3
:遍
历
数据
栈
.
简单
的
List
类
,
List<Attr>
class Attr{String attrName;String getAttrName(){return "123";}}
<s:iterator value="label" id="id">
<s:property value="#id.attrName" />
</s:iterator>
当然
value
还
可以写成
value="%{label}" label
可以有
.
操作
label
的属性
List
可以写成
value="%{label.list}"
相当于:
getLabel().getList();
4
:遍
历
2
个
list
;
List<AttrName> attrN {color,size,style}
List<AttrValue> attrV {red,20,gay}
这
2
个
list
的元素是一一
对应
的,一个
attrN
对应
一个
attrV
<s:iterator value="%{attrN }" id="id" status="status">
index is : <s:property value='status.index'/>
attrName is : <s:property value='id'/> or <s:property value='%{id}'/>
attrName is : <s:property value='%{attrV[#status.index]}'/>
</s:iterator>
<s:bean name="org.apache.struts2.util.Counter" id="counter">
<s:param name="first" value="5" />
<s:param name="last" value="10" />
<s:iterator>
counter:<s:property/>
</s:iterator>
</s:bean>
这
个
标签
主要的的作用就是迭代出集合。。
value
属性表示需要跌代
显
示出来的
值
。
status
属性,又来保存迭代
时
的一些状
态值
。
注:
1.
如果需要引用
valueStack
中的
值
,需要使用
这样
的形式。
<s:iterator value="#userList" /> //userList
在
action
部分被保存在
Request
中,所以使用
#
加属性名来引用
值
。
2.
如果集合的
值
是通
过
action
的方法,假
设
我
们
的
action
中有一个
getListMenu
方法,返回一个
List
集合。
我
们
可以使用如下的形式来引用
这
个集合,并用
s:iterator
来
输
出。
<s:iterator value="listMenu" />
3.iterator
的
value
使用定
义
好的方式,如:
<s:iterator value="{1,2,3,4}" /> //
这样
跌代
输
出的
值
就是
1.2.3
.4
这
四个
值
。
二、
iterator
中
输
出具体
值
,如果,在上面我
们
的
list
中的
对
象,有两个属性,都是
String
类
型,一个是
name,
一个是
url
。
我
们
可以
这样
来引用。
1. <s:property value="name" /> //
这样
我
们
将可以
输
出跌代
对
象的
name
属性
值
。
2.
如果我
们
希望使用
<s:url />
来将跳
转过
后的
url
进
行
处
理,
该
如何来做?
<s:url
value="%{url}"/>
//%{}ognl
的表达式,
这样
的
值
能
够
将
url
的
值进
行
<s:url/>
的
处
理
实际
上就是
转为绝对
路径。
这样
,我
们
就可以
对
付一些因跳
转换产
生的路径
问题
。
原因:因
为
<s:iteratotr />
以后,当前的
对
象
应该
就在
ValueStack
顶
部了,
这样
当然的
url
实际
上就是
对
象的
url
属性了
三、使用
ognl
输
出
对应
的
值
。
<s:textfield name="loginName" value="%{#request.loginNames}"/>
使用此表达式,会生成一个文本框,并且,如果
request.attribute
中有
loginNames
属性,将会做
为
些文本框的默
认值
。
如果只使用
#request.loginNames
在
struts2
的
标签
内部,是不会
显
示任何
值
的,注意外面加上的
%{}
附号,才会被正常的使用。
如果希望如
EL
语
言一
样
直接
输
出文件,如在一个
<a></a>
之
间
的
innerHTML
文本
为
#request.loginNames
的
值
,我
们
只要使用:
<s:property value="#request.loginNames" />
使可以正常使用!
注:
1.${}
是
EL
语
言的
%{}
这样
的形式是
ognl
表
过
式
语
言的,在
struts2
的
标签
内部,使用
%{}
这样
的形式,在
标签
外部可以使用
${}EL
语
言的方式。如果在
struts2
的
标签
内部使用
${}
这样
的方式,会出
现
以下的
错误
提示:
According to TLD or attribute directive in tag file, attribute value does not accept any expressions
2.
很多
时
候,我
们
使用
struts2
的一些
标签
,属性是需要接受集合的,如果集合是保存在
request,session
,或者是
值栈
(
非根
对
象的
栈顶
)
,可以使用
#
变
量名的方式,如果
获
取的
值
是在
Action
中通
过
特定的方法来
获
取,就需要使用如
value="userList"
这样
的方式,只是去掉了前面的
#
。
struts2
中的
OGNL
用法
User
对
象属性
获
取
如
User
中有
username
和
password
字段
获
取
username
属性
<s:property value="user.username" />
获
取
password
属性
<s:property value="user.password" />
若
User
中又包含定
义
了
address
对
象,
address
对
象中包含有
addr
属性,
则
可以
这样访问
获
取
addr
属性
<s:property value="user.address.addr" />
若
User
中
还
包含一个
get()
的普通方法,可以
这样调
用
<s:property value="user.get()" />
以上是
调
用
值栈
中
对
象的普通方法,
user
为值栈
中的
对
象
调
用
action
中的静
态
方法
get()
,普通方法不能直接
调
用
<s:property value="@com.netshuai.action.ManagerAction@get()" />
以上
为调
用非
值栈
中的静
态
方法
调
用
JDK
中
类
的静
态
方法
<s:property value="@java.lang.Math@floor(32.56)" />
上例也可写成
<s:property value="@@floor(32.56)" />
,省略前面的
类则
默
认
使用
java.lang.Math
类
,其他
类
不可省略
调
用普通
类
中的静
态
属性
<s:property value="@com.netshuai.model.Address@city" />
address
中的
city
静
态
属性要用
public
声明
调
用普通
类
的构造方法,如构造方法
为
public User(String username)
{
this.username=username;
}
调
用方法
为
<s:property value="new com.netshuai.model.User('hello').username" />
,
则
返回
username
值为
hello
获
取
List<s:property value="list" />
获
取
List
中的某一个元素
<s:property value="list[0]" />
获
取
List
的大小
<s:property value="list.size" />
获
取
Set<s:property value="set" />
无法
获
取
Set
中的某一个元素,因
为
Set
没有
顺
序
获
取
Map<s:property value="map" />
获
取
Map
中所有
key
的
值
<s:property value="map.keys" />
获
取
Map
中所有
value
的
值
<s:property value="map.values" />
获
取
Map
中的某一个元素
<s:property value="map['k1']" />
获
取
List
所有
对
象
<s:property value="listObject" />
,需要重写
toString()
方法才能正常
显
示
对
象的
值
利用投影
获
取
List
中所有
对
象的
username
属性
<s:property value="listObject.{username}" />
利用投影
获
取
List
中第一个
对
象的
username
属性
<s:property value="listObject.{username}[0]" />
利用
选择获
取
List
中年
龄
大于
30
的
对
象
<s:property value="listObject.{?#this.age>30}" />
利用
选择获
取
List
中年
龄
大于
30
的
对
象的
username<s:property value="listObject.{?#this.age>30}.{username}" />
利
用
选择获
取
List
中年
龄
大于
30
的第一个
对
象的
username<s:property value="listObject.{?#this.age>30}.{username}[0]" />
或
<s:property value="listObject.{^#this.age>30}.{username}" />
利用
选择获
取
List
中年
龄
大于
30
的最后一个
对
象的
username<s:property value="listObject.{$#this.age>30}.{username}" />
获
取
parameters
中的属性
<s:property value="#parameters.name" />
获
取
request
中的属性
<s:property value="#request.name" />
获
取
session
中的属性
<s:property value="#session.name" />
获
取
application
中的属性
<s:property value="#application.name" />
<s:property value="#attr.name" />
按
顺
序遍
历
上面四个
对
象,然后返回首先找到的
值
%{}
可以取出存在
值
堆
栈
中的
Action
对
象,直接
调
用它的方法,如
%{getText('key')}
可以取出国
际
化信息
${}
可以用在国
际
化
资
源文件中和
struts2
配置文件中
使用
top
获
取
值栈
中第二个
对
象
<s:property value="[1].top.user"/>
使用
top
获
取
值栈
中第二个
对
象的属性
<s:property value="[1].user"/>
调
用
值栈
中
action
的静
态
方法
get()<s:property value="@vs@get()"/>
,
vs
也可写做
vs1
调
用
值栈
中第二个
action
的静
态
方法
get()<s:property value="@vs2@get()"/>
将一个
对
象放入
值栈
ActionContext.getContext().getValueStack().push(user);
相关文章推荐
- struts2中s:iterator 标签的使用详解 及 OGNL用法
- struts2中s:iterator 标签的使用详解 及 OGNL用法
- struts2中s:iterator 标签的使用详解 及 OGNL用法
- struts2中s:iterator 标签的使用详解 及 OGNL用法
- .struts2中s:iterator 标签的使用详解 及 OGNL用法
- Struts2 OGNL表达式的iterator标签使用详解
- struts2中s:iterator 标签的使用详解
- struts2中的if/else,iterator标签以及ognl简单使用
- Struts2中s:iterator标签的使用详解
- struts2中s:iterator 标签的使用详解
- struts2中s:iterator 标签的使用详解
- struts2中s:iterator 标签的使用详解
- Struts2中的OGNL详解(和标签库一起使用)
- struts2中s:iterator 标签的使用详解
- jsp页面,使用Struts2标签,传递和获取Action类里的参数,注意事项。<s:a action><s:iterator><s:param>ognl表达式 在编写SSH2项目的时候,除
- [Struts2] OGNL s:iterator标签的使用
- Struts2标签库详解(转载)
- Struts2中iterator标签的使用
- struts2的s:iterator 标签 详解
- OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例