1、if 、elseif 和else用来改变结构
<div>Will Not Be Executed </div>
</s:if>
<s:elseif test="%{true}">
<div>Will Be Executed </div>
</s:elseif>
<s:else>
<div>Will Not Be Executed </div>
</s:else>
2、append
使用<s:append../>标签需要指定一个id属性,该属性确定拼接生成的新集合名称.<s:append../>标签接受多个<s:param.../>子标签,每个子标签指定一个集合,append标签负责将多个集合拼接成一个集合.
- <s:append var="myAppendIterator">
<s:param value="%{#request.names}" />
<s:param value="%{#request.names}" />
<s:param value="%{#request.names}" />
</s:append>
<s:iterator value="%{#myAppendIterator}">
<s:property />
</s:iterator>
3、generator
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>
<body>
<h1>Struts 2 Generator tag example</h1>
1. Generator tag example.
<s:generator val="%{'java|.net|c|python|shell'}" separator="|">
<ol>
<s:iterator>
<li><s:property /></li>
</s:iterator>
</s:generator>
</ol>
2. Generator tag with converter example
<s:generator val="%{'java|.net|c|python|shell'}" separator="|"
converter="%{languageConverter}">
<ol>
<s:iterator>
<li><s:property /></li>
</s:iterator>
</s:generator>
</ol>
</body>
</html>
- count :可选属性,该属性指定生成集合中元素的总数。
- separator :必填属性,指定用于解析字符串的分隔符。
- val:必填属性,指定被解析的字符串。
- converter:可选属性,指定一个转换器,该转换器负责将集合汇总的每个字符串转换成对象
- id:可选属性,如果指定了该属性,则将生成的集合放在pageContext属性中
4、iterator
status | 否 | String | 如果设置此参数,一个IteratorStatus的实例将会压入每个遍历的堆栈 | |
value | 否 | Object/String | 要遍历的可枚举的(iteratable)数据源,或者将放入新列表(List)的对象 | |
id | 否 | Object/String | 用来标识元素的id。在UI和表单中为HTML的id属性 |
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
List list = new ArrayList();
list.add("Max");
list.add("Scott");
list.add("Jeffry");
list.add("Joe");
list.add("Kelvin");
request.setAttribute("names", list);
%>
<html>
<head>
<title>Iterator</title>
</head>
<body>
<h3>Names: </h3>
<!--
1、此处的空property元素用于获得当前iterator的值
2、status被设成stuts,在iterator的里面就可以通过#stuts取得IteratorStatus的对象。IteratorStatus类包含当前序号信息,如是否第一个或最后一个,是否为奇数序号。这些信息在我们做格式化的时候,显得非常有用。
-->
<ol>
<s:iterator value="#request.names" status="stuts">
<s:if test="#stuts.odd == true">
<li>White <s:property /></li>
</s:if>
<s:else>
<li style="background-color:gray"><s:property /></li>
</s:else>
</s:iterator>
</ol>
</body>
</html>
http://blog.sina.com.cn/s/blog_3e3779c10100c0yj.html
1:#status.odd 是否奇数行
2:#status.count 当前行数
3:#status.index 当前行的序号,从0开始『#status.count=#status.index+1』
4:#status.first 是否第一行
5:#status.last 是否最后一行
6:#status.modules(int) 当前行数取模
5、merge
merge 标签的用法看起来非常像append标签,也是用于将多个集合拼接成一个集合,但是与append有区别。
如果采用append方式拼接,新集合的元素顺序为:
(1)第一集合的第1个元素
(2)第一集合的第2个元素
(3)第一集合的第3个元素
(4)第二集合的第1个元素
(5)第二集合的第2个元素
(6)第二集合的第3个元素
(7)第三集合的第1个元素
(8)第三集合的第2个元素
(9)第三集合的第3个元素
如果采用merge 方式拼接,新集合的元素顺序为:
(1)第一集合的第1个元素
(2)第二集合的第1个元素
(3)第三集合的第1个元素
(4)第一集合的第2个元素
(5)第二集合的第2个元素
(6)第三集合的第2个元素
(7)第一集合的第3个元素
(8)第二集合的第3个元素
(9)第三集合的第3个元素
merge标签的使用,与使用append标签的使用示例大致相同
http://younglibin.javaeye.com/blog/459077
<s:merge var="myAppendIterator">
<s:param value="%{#request.names}" />
<s:param value="%{#request.names}" />
<s:param value="%{#request.names}" />
</s:merge>
<s:iterator value="%{#myAppendIterator}">
<s:property />
</s:iterator>
6、sort
sort标签
sort标签对于指定的集合元素进行排序,排序时,必须提供自己的排序规则,即实现自己的Comparator,自己的Comparator需要实现java.util.Comparator接口。
使用sort标签时可指定如下几个属性:
- comparator:必填属性,指定进行排序的Comparator实例。
- source:可选属性,指定被排序的集合。默认对valuestack栈顶的集合进行排序。
- var: 可选,如果指定了改属性,则生成Iterator对象设置成page范围的属性,该属性可以换成ID ,但推荐使用var属性;改属性的作用与subset标签中var属性作用不同!
7、subset
<s:subset source="%{#request.names}" start="1" count="3">
<s:iterator>
<s:property/>
</s:iterator>
</s:subset>
subset标签用于去得集合的子集,该标签的底层通过org.apache.struts2.util.Subset.IteratorFilter类提供实现.
使用subset标签可以指定的属性有:
- count: 可选属性,指定子集中元素的个数.在不指定该属性情况下,默认取得源集合的全部元素
- source: 可选属性,指定源集合.若不指定,默认取得ValueStack栈顶的集合.
- start:可选属性,指定子集从源集合中的第几个元素开始截取.默认从第一个开始截取,默认值为0
- decider:可选属性,指定由开发者自己决定是否选中该元素.