.struts2中s:iterator 标签的使用详解 及 OGNL用法


 
简单demo
s:iterator 
标签3个属性:
value
:被迭代的集合
id   
:指定集合里面的元素的 id
status 
迭代元素的索引

1:jsp
面定元素写法 list

<s:iterator value="{'1','2','3','4','5'}" > 
<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'}" 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"}" 
个元素以都好隔。元素之keyvalue 冒号隔
value
也可以是数据里面的java.util.Map
写法如下:
<s:iterator value="map" 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" > 
<s:property value="#id.attrName" /> 
</s:iterator> 
当然value 可以写成 value="%{label}" label可以有.操作
label
的属性List 可以写成value="%{label.list}" 相当于:getLabel().getList();
4
:遍2list

List<AttrName> attrN {color,size,style}
List<AttrValue> attrV {red,20,gay}
2list的元素是一一对应的,一个attrN对应一个attrV
<s:iterator value="%{attrN }"    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 >
<s:param value="5" />
<s:param 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 value="%{#request.loginNames}"/> 

使用此表达式,会生成一个文本框,并且,如果request.attribute中有loginNames属性,将会做些文本框的默认值
 
如果只使用#request.loginNamesstruts2标签内部,是不会示任何的,注意外面加上的%{}附号,才会被正常的使用。
 
如果希望如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中有usernamepassword字段
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用法
 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告