您的位置:首页 > 编程语言 > Java开发

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: