通用标签用来在页面表示的时候控制代码执行的过程,这些标签也允许从Action或者值栈中取得数据。
if标签、else 标签、elseIf 标签
If标签用来控制基本的条件处理流程,通常和else标签或者elseif标签连用。
名字 | 是否必须 | 可否使用表达式 | 类型 | 描述 |
---|---|---|---|---|
id | false | true | String | 用来表示该元素,对于UI和Form标签来说直接转变为HTML id属性 |
test | true | true | Boolean | 用来决定是否显示标签内部内容的表达式 |
例子
<s:if test="%{false}">
<div>Will Not Be Executeddiv>
s:if>
<s:elseif test="%{true}">
<div>Will Be Executeddiv>
s:elseif>
<s:else>
<div>Will Not Be Executeddiv>
s:else>
append标签
用来做标签的辅助,将不同中的内容合在一个中。
名字 | 是否必须 | 可否使用表达式 | 类型 | 描述 |
---|---|---|---|---|
id | false | true | String | 用来保存结果的对象在 context中的名字。 |
例子
Action类
public class AppendIteratorTagAction extends ActionSupport {
private List myList1;
private List myList2;
private List myList3;
public String execute() throws Exception {
myList1 = new ArrayList();
myList1.add("1");
myList1.add("2");
myList1.add("3");
myList2 = new ArrayList();
myList2.add("a");
myList2.add("b");
myList2.add("c");
myList3 = new ArrayList();
myList3.add("A");
myList3.add("B");
myList3.add("C");
return "done";
}
public List getMyList1() { return myList1; }
public List getMyList2() { return myList2; }
public List getMyList3() { return myList3; }
标签使用
<s:append id="myAppendIterator">
<s:param value="%{myList1}" />
<s:param value="%{myList2}" />
<s:param value="%{myList3}" />
s:append>
<s:iterator value="%{#myAppendIterator}">
<s:property />
s:iterator>
generator 标签
从val属性生成一个iterator(迭代器)。
名字 | 是否必须 | 可否使用表达式 | 类型 | 描述 |
---|---|---|---|---|
converter | false | false | org.apache.struts2.util.IteratorGenerator.Converter | 将从 val 解析的字符串项转换为对象 |
count | false | false | Integer | 迭代的最大次数 |
separator | true | false | String | 用于将 val 分隔为iterator(迭代器)的条目 |
val | true | false | String | 要解析为iterator(迭代器)的资源,如Java中的List,String等 |
var | false | false | String | 如果提供了该名称,则将结果迭代器存储到页面上下文中 |
例1: 生成一个简单的iterator,并且使用iterator标签打印出内容。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}">
<s:iterator>
<s:property /><br/>
s:iterator>
s:generator>
例2: 生成一个iterator,使用count属性。因为count属性值为3,所以只有前三个内容(aaa,bbb,ccc)在生成的iterator中。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3">
<s:iterator>
<s:property /><br/>
s:iterator>
s:generator>
例3: 生成iterator,使用了id属性,之后生成的对象放在pageContext中,可以通过指定的id来访问。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" />
<%
Iterator i = (Iterator) pageContext.getAttribute("myAtt");
while(i.hasNext()) {
String s = (String) i.next();
%>
<%= s %> <br/>
<%
}
%>
例4: 生成iterator,使用converter属性,这里的convertor仅仅将每一个对象添加了一个"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;
}
};
}
...
}
iterator标签
迭代处理一个java.util.Connection或者java.util.Iterator对象
名字 | 是否必须 | 默认值 | 能否使用表达式 | 类型 | 描述 |
---|---|---|---|---|---|
begin | false | 0 | false | Integer | 指定迭代的开始位置 |
end | false | 可迭代对象的最大长度,如果 ‘step’ 为负数则为0 | false | Integer | 指定迭代的终点位置 |
status | false | false | false | Boolean | 该变量用来查询当前迭代的状态,该实例包含如下几个方法:getCount(),返回当前迭代了几个元素。getIndex(),返回当前迭代元素的索引。isEven(),返回当前被迭代元素的索引是否是偶数。isOdd(),返回当前被迭代元素的索引是否是奇数。isFirst(),返回当前被迭代元素是否是第一个元素。isLast(),返回当前被迭代元素是否是最后一个元素。 |
step | false | 1 | false | Integer | 指定迭代的步长 |
value | false | false | String | 要迭代的可迭代源,即被迭代的对象 | |
var | false | false | String | 指向值栈中的值 |
例1: 将索引为奇的元素字体设为红色,为偶的字体设为蓝色。
<s:set name="list" value="{'tom','jack','james'}" />
<s:iterator value="#list" status="st">
<font color= test="#st.odd"> reds:if><s:else>blues:else>>
<s:property />font><br>
s:iterator>
例2:从action类中获取 users 对象,并迭代对象。
<s:iterator value="users" var="user" >
<s:property value="#user.id" /><br>
<s:property value="#user.name" /><br>
<s:property value="#user.password" /><br>
<s:property value="#user.phone"/><br>
s:iterator>
sort 标签
对一个可以迭代的对象进行排序操作。
名字 | 是否必须 | 可否使用表达式 | 类型 | 描述 |
---|---|---|---|---|
Comparator | true | true | java.util.Comparator | 排序用的比较器 |
Source | false | true | String | 排序对象 |
var | false | false | String | 创建一个对象,保存排序后的结果 |
例1:
<s:sort comparator="myComparator" source="myList">
<s:iterator>
<s:property value="..." />
s:iterator>
s:sort>
例2:
<s:sort var="mySortedList" comparator="myComparator" source="myList" />
<%
Iterator sortedIterator = (Iterator) pageContext.getAttribute("mySortedList");
for (Iterator i = sortedIterator; i.hasNext(); ) {
// 对每个排序后的元素进行处理
}
%>
subset标签
递归的一部分,接受迭代器并输出其子集的标记。委托给{@link org.apache.struts2.util。SubsetIteratorFilter}内部执行子集功能。
名字 | 是否必须 | 可否使用表达式 | 类型 | 描述 |
---|---|---|---|---|
count | false | false | Integer | 指示结果子集迭代器中要包含的项数 |
Decider | false | false | org.apache.stru2.util. SubsetFilter.Decider | 用于插入一个判定器,以确定该特定条目是否包括在结果子集迭代器中 |
Source | false | false | String | 指示要基于其派生出的子集迭代器的源 |
Start | false | false | Integer | 指示源中可用项的起始索引,作为结果子集迭代器中的第一个项 |
var | false | false | String | 将结果迭代器存储到页面上下文中的名称 |
例1:
public class MySubsetTagAction extends ActionSupport {
public String execute() throws Exception {
l = new ArrayList();
l.add(new Integer(1));
l.add(new Integer(2));
l.add(new Integer(3));
l.add(new Integer(4));
l.add(new Integer(5));
return "done";
}
public Integer[] getMyArray() {
return a;
}
public List getMyList() {
return l;
}
public Decider getMyDecider() {
return new Decider() {
public boolean decide(Object element) throws Exception {
int i = ((Integer)element).intValue();
return (((i % 2) == 0)?true:false);
}
};
}
}
<s:subset source="myList">
<s:iterator>
<s:property />
s:iterator>
s:subset>
<s:subset source="myList" count="3">
<s:iterator>
<s:property />
s:iterator>
s:subset>
<s:subset source="myList" count="13" start="3">
<s:iterator>
<s:property />
s:iterator>
s:subset>
<s:subset var="mySubset" source="myList" count="13" start="3" />
<%
Iterator i = (Iterator) pageContext.getAttribute("mySubset");
while(i.hasNext()) {
%>
<%=i.next() %>
<% } %>
<s:subset source="myList" decider="myDecider">
<s:iterator>
<s:property />
s:iterator>
s:subset>