if/elseif/else:分支控制
test=用来测试的逻辑表达式,接受1或0的逻辑运算结果,利用"%{}"进行运算
调用方法如下:<s:set name="month" value="8"/>
<s:if test=%{#month>=2&&#month<=4}>
Spring
</s:if>
<s:elseif test=%{#month>=5&&#month<=7}>
Summer
</s:elseif>
<s:elseif test=%{#month>=8&&#month<=10}>
Fall
</s:elseif>
<s:else>
Winter
</s:else>
iterator:迭代器
value=被迭代的集合,可以使List、Set、Map或者数组,通常使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合
id=制定集合中元素的ID,可以利用该属性访问集合中的单个元素
status=指定迭代时IteratorStatus实例,用以判断当前迭代元素的属性,比如迭代元素是否为最后一个以及当前迭代元素的索引值是多少
调用方法如下:
1:迭代简单集合:
<table border=1 width=200>
<s:iterator value="{'Friskit','20','Java EE','Struts'}" id="misc" status="sta">
<tr <s:if test="#sta.odd">style="background-color:#eeeeee"</s:if>>
<td><s:property value="misc"/></td>
</tr>
</s:iterator>
</table>
2:迭代Map对象,在迭代Map对象的时候每个key-value键值对被当成一个集合元素。为了分别取出Map中的每项key和value,使用property标签的时候,通过指定value的属性为value和key来实现(不同于迭代集合中使用id标签),代码如下:
<table border=1 width=200>
<s:iterator value="#{'Friskit':'Boy','JessicaPark':'Girl','Fem':'Boy'}" status="status">
<tr <s:if test="#status.odd">style="background-color:#eeeeee"</s:if>>
<td><s:property value="%{#status.index+1}"/></td>
<td><s:property value="key"/></td>
<td><s:property value="value"/></td>
</tr>
</s:iterator>
</table>
注:若Iterator设置了status标签值,则每次迭代时都会创建一个IteratorStatus对象,IteratorStatus类包含了一下方法(getter属性):
int getCount() //返回当前迭代元素的数量
int getIndex() //返回当前迭代元素的索引
boolean isEven() //返回当前被迭代元素的索引是否为偶数
boolean isFirst() //返回当前被迭代元素是否为第一个元素
boolean isLast() //返回当前被迭代元素是否为最后一个元素
boolean isOdd() //返回当前被迭代元素的索引是否为奇数