要想使用 struts2 标签,必须在 jsp 页面中引入标记
<%@ taglib prefix="s" uri="/struts-tags"%>
Struts2 的标签与 struts1 有很大的不同
Struts1 将标志库按功能分成 HTML 、 Tiles 、 Logic 和 Bean 等几部分 , 且不支持嵌入语言( EL )。
Struts2 把所有的标签都归于 URI 为 “/struts-tags” 命名空间下,从功能上将其分为两大类:通用标志和 UI 标志。
官网 taglib 的 URL 为 http://struts.apache.org/2.x/docs/tag-reference.html
通用标签(控制类)
· If 、 elseif 、 else
<s:if test= "exp1" >
<div> exp1 返回 true ,则显示,否则不显示 </div>
</s:if>
<s:elseif test= "exp2" >
<div> 在 exp1 返回 false 前提下, exp2 返回 true ,则显示,否则不显示 </div>
</s:elseif>
<s:else>
<div> exp2 和 exp1 都返回 false 时显示 </div>
</s:else>
名称 | 必需 | 默认 | 类型 | 描述 | 备注 |
test | 是 |
| Boolean | 决定标志里内容是否显示的表达式 | else 标志没有这个参数 |
id | 否 |
| String | 标识 | 或者是var |
· append 、 generator 、 iterator 、 merge 、 subset
Append :往 iterator 迭代器中添加项
<s:append var= "myAppendIterator" >
<s:param value= "%{myList1}" />
<s:param value= "%{myList2}" />
<s:param value= "%{myList3}" />
</s:append>
<s:iterator value= "%{#myAppendIterator}" >
<s:property />
</s:iterator>
generator : iterator 迭代器的生成器
例 1 :生成 iterator 并打印 iterator 中的值
<s:generator val= "%{'aaa,bbb,ccc,ddd,eee'}" >
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>
例 2 :生成一个带记数的 iterator ,超出记数的部分将被忽略,如“ ddd,eee ”
<s:generator val= "%{'aaa,bbb,ccc,ddd,eee'}" count= "3" >
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>
例 3 :生成带标识的 iterator , 生成的对象放在 pageContext 中,可通过 标识 来访问
<s:generator val= "%{'aaa,bbb,ccc,ddd,eee'}" count= "4" separator= "," var= "myAtt" />
<%
Iterator i = (Iterator) pageContext.getAttribute("myAtt" );
while(i.hasNext()) {
String s = (String) i.next(); %>
<%=s%> <br/>
<% }
%>
例 4 : 生成 iterator ,使用 converter 属性,将每一个对象添加了一个 "converter-" 前缀。
<s:generator val= "%{'aaa,bbb,ccc,ddd,eee'}" converter= "%{myConverter}" >
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>
public class GeneratorTagAction extends ActionSupport {
....
public Converter getMyConverter() {
return new Converter() {
public Object convert(String value) throws Exception {
return "converter-" +value;
}
};
}
...
}
名称 | 必需 | 默认 | 类型 | 描述 | 备注 |
converter | 否 |
| org.apache.struts2.util.IteratorGenerator.Converter | 额外操作 |
|
count | 否 |
| Integer | 数量 |
|
id | 否 |
| String | 标识 |
|
separator | 是 |
| String | 两值的分割 |
|
val | 是 |
| String | 值 |
|
Iterator: 迭代器
<s:bean name= "org.apache.struts2.example.IteratorExample" var= "it" >
<s:param name= "day" value= "'foo'" />
<s:param name= "day" value= "'bar'" />
</s:bean>
<p/>
<table border= "0" cellspacing= "0" cellpadding= "1" >
<tr>
<th> Days of the week</th>
</tr>
<p/>
<s:iterator value= "#it.days" status= "rowstatus" >
<tr>
<s:if test= "#rowstatus.odd == true" >
<td style= "background: grey" ><s:property/></td>
</s:if>
<s:else>
<td><s:property/></td>
</s:else>
</tr>
</s:iterator>
</table>
名称 | 必需 | 默认 | 类型 | 描述 | 备注 |
id | 否 |
| String | 标识 |
|
status | 否 | false | Boolean | 决定是否使用子项的标识变量 |
|
value | 否 |
| String | 引用的变量 |
|
Merge :和 apand 功能类似
<s:merge var= "myMergedIterator1" >
<s:param value= "%{myList1}" />
<s:param value= "%{myList2}" />
<s:param value= "%{myList3}" />
</s:merge>
<s:iterator value= "%{#myMergedIterator1}" >
<s:property />
</s:iterator>
Sort: iterator 中的项排序
用法 1:
<s:sort comparator= "myComparator" source= "myList" >
<s:iterator>
<!-- do something with each sorted elements -->
<s:property value= "..." />
</s:iterator>
</s:sort>
用法 2:
<s:sort var= "mySortedList" comparator= "myComparator" source= "myList" />
名称 | 必需 | 默认 | 类型 | 描述 | 备注 |
id | 否 |
| String | 标识 |
|
是 |
| ava.util.Comparator | 排序用的比较器 |
| |
Source | 否 |
| String | 排序对象标识 |
|
Subset : iterator 的子项
<!-- s: List basic -->
<s:subset source= "myList" >
<s:iterator>
<s:property />
</s:iterator>
</s:subset>
<!-- B: List with count -->
<s:subset source= "myList" count= "3" >
<s:iterator>
<s:property />
</s:iterator>
</s:subset>
<!-- C: List with start -->
<s:subset source= "myList" count= "13" start= "3" >
<s:iterator>
<s:property />
</s:iterator>
</s:subset>
<!-- D: List with var -->
<s:subset var= "mySubset" source= "myList" count= "13" start= "3" />
<%
Iterator i = (Iterator) pageContext.getAttribute("mySubset" );
while(i.hasNext()) {
%>
<%=i.next() %>
<% } %>
<!-- D: List with Decider -->
<s:subset source= "myList" decider= "myDecider" >
<s:iterator>
<s:property />
</s:iterator>
</s:subset>
名称 | 必需 | 默认 | 类型 | 描述 | 备注 |
id | 否 |
| String | 标识 |
|
count | 否 |
| Integer | 子集的子项的个数 |
|
Source | 否 |
| String | iterator 对象标识 |
|
start | 否 |
| Integer | 从该个开始取子集 |
|
decider | 否 |
| org.apache.struts2.util.SubsetIteratorFilter.Decider | 用作取 iterator 子集 的操作器 |
|
未完待继
通用标签(数据类)