1:if,elsefi, else标签

     简单示例:

   

<%
int length = 15;
request.setAttribute("len", length);
%>
<s:if test="#request['len'] >= 20">
输入的值大于等于20
</s:if>
<s:elseif test="#request['len'] >= 15">
输入的值大于等于15
</s:elseif>
<s:else>
输入的值小于15
</s:else>


输出情况:

  输入的值大于等于15


2:iterator标签

      *用来处理循环,可以用它遍历数组,Set和List等集合对象,这个标签还支持在ActionContext中保持一个保存遍历状态的对象,通过这个变量可以得到当前循环的各种信息。

      *它在遍历一组对象的时候,它把正在循环的对象放在值栈的栈顶,所以可以直接使用这个对象的方法或者属性。

      *属性信息

           *value:用来指明访问的是哪个对象。

           *status:这个属性在ActionContext中保存一个对象,用来返回当前循环的各种信息,可以返回的信息如下:

                 *count:集合含有多少个对象

                 *index:正在循环的这一项的索引

                 *even:当前遍历到的对象是不是处于列表的偶数索引位置

                 *odd:当前遍历到的对象是不是处于列表的奇数索引位置

                 *first:正在循环的是不是第一个

                 *last:正在循环的是不是最后一个

                 *begin, end,step:指明了如果使用索引来进行循环时的开始、结束和步长。

                 *var:变量名称,用来引用存放到值栈的被循环的对象

   

           简单示例1:实现类似于for循环的功能


<s:iterator var="i" begin="1" end="10" step="1">
<s:property value="#i"/>
</s:iterator>


          简单示例2:实现类似于while循环的功能

             

<%
List strList = new ArrayList();
for(int i = 0; i < 10; i++) {
strList.add("str" + i);
}
request.setAttribute("strList", strList);
%>
<s:iterator var="str" value="#request['strList']">
<s:property value="#str"/>
</s:iterator>


输出结果:

    str0 str1 str2 str3 str4 str5 str6 str7 str8 str9


      简单示例3:访问复杂对象

       

<%
List userList = new ArrayList();

User user1 = new User();
user1.setAge(20);
user1.setName("zhangsan");

User user2 = new User();
user2.setAge(30);
user2.setName("lisi");

userList.add(user1);
userList.add(user2);

request.setAttribute("users", userList);

%>
<s:iterator var="user" value="#request.users">
user.name=<s:property value="name"/>,
user.age=<s:property value="age"/><br/>
</s:iterator>


      输出结果:

             

user.name=zhangsan, user.age=20
user.name=lisi, user.age=30


        简单示例4:使用status属性

          如果想输出当前循环的索引,或者是想要把循环输出的数据用表格来展示,并按照奇数行和偶数行来设置不同的背景色,也就是用户熟悉的波浪纹或者斑马纹的效果。

      就要使用status属性。<s:property>引用status属性名称的时候前面要加#号

     

<%
List userList = new ArrayList();

User user1 = new User();
user1.setAge(20);
user1.setName("zhangsan");

User user2 = new User();
user2.setAge(30);
user2.setName("lisi");

userList.add(user1);
userList.add(user2);

request.setAttribute("users", userList);

%>
<s:iterator var="user" value="#request.users" status="state">
索引=<s:property value="#state.index"/>,
user.name=<s:property value="name"/>,
user.age=<s:property value="age"/><br/>
</s:iterator>


      输出结果:

      

索引=0, user.name=zhangsan, user.age=20
索引=1, user.name=lisi, user.age=30


        实现斑马纹与波浪纹效果:

    

<%
List userList = new ArrayList();

User user1 = new User();
user1.setAge(20);
user1.setName("zhangsan");

User user2 = new User();
user2.setAge(30);
user2.setName("lisi");

User user3 = new User();
user3.setAge(30);
user3.setName("wangwu");

User user4 = new User();
user4.setAge(30);
user4.setName("maliu");

userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);

request.setAttribute("users", userList);

%>
<table border="1">
<tr>
<td colspan=4 align="center">用户列表</td>
</tr>
<tr>
<td>索引</td>
<td>用户姓名</td>
<td>用户年龄</td>
<td>操作</td>
</tr>
<s:iterator var="user" value="#request.users" status="state">
<tr
<s:if test="#state.even">
bgcolor="#EFF8FF"
</s:if>
<s:else>
bgcolor="#B4CFF1"
</s:else>
>
<td><s:property value="#state.index"/></td>
<td><s:property value="name"/></td>
<td><s:property value="age" /></td>
<td><a href="">修改</a> <a href="">删除</a></td>
</tr>
</s:iterator>
</table>


输出结果:

   


3:append与param便签

     *append标签用于把几个已经存在的集合组合成一个大集合,param标签与它连用,用来指定组合哪些集合

    简单示例:

    

<s:set var="list1" value="{1, 2, 3}" />
<s:set var="list2" value="{4, 5, 6}" />
<s:append var="list3">
<s:param value="#list1" />
<s:param value="#list2" />
</s:append>
<s:iterator value="#list3">
<s:property/>
</s:iterator>


输出结果: 

    1 2 3 4 5 6

param标签的value属性指定了被组合的集合


4:generator标签

       *功能是用来切分字符串,并把切分的结果组成一个集合

       *属性

             *val:指定被切分的字符串

             *separator:指定切分字符串用的分隔符,必须指定,比如要用","来切分字符串"a, b, c, d",最终的结果为包含a, b, c, d四个字符串的集合。

             *count: 返回集合的最大长度

             *converter: 用于设置自定义的Converter,必须是org.apache.Struts2.util.IteratorGenerator.Converter接口的实现类

             *var:指定变量名称,用来访问放到值栈中的集合。


         简单示例1:

<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" separator=",">
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>


         输出结果:

          aaa
          bbb
          ccc
         ddd
         eee

  

           简单示例2:

Generate an iterator with count attribute<br>
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3" separator=",">
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>

     输出结果:

    Generate an iterator with count attribute
    aaa
    bbb
    ccc

  count=3表示只取集合中的三个元素,即只有3个元素是有效的。


5:merge标签

     *用来把几个已经存在的集合组合成一个大集合,与append标签的作用类似,只是原来集合中出现的各个元素出现在大集合中的顺序不同。

     

<s:set value="{1, 2, 3}" var="list1"/>
<s:set value="{4, 5, 6}" var="list2"/>
<s:merge var="list3">
<s:param value="#list1" />
<s:param value="#list2" />
</s:merge>
<s:iterator value="#list3">
<s:property/>
</s:iterator>


输出结果为:

   1 4 2 5 3 6


6:sort标签

     *利用设置的比较器,来对指定的集合进行排序

     *主要属性

           *comparator: 用来指定对集合排序使用的比较器的实例

           *source: 需要排序的集合

           *var:变量名称,把集合排序后的结果存放到pagecontext中的key值

       实例1:包含基本数据类型的集合排序示例

            *首先准备比较器,实现java.util.Comparator接口,实现对整形数据进行升序排序

                  

package com.capinfotech.util;

import java.util.Comparator;

public class IntegerComparator implements Comparator<Integer> {

@Override
public int compare(Integer o1, Integer o2) {
int a = Integer.parseInt(o1.toString());
int b = Integer.parseInt(o2.toString());
if(a > b) {
return 1;
} else if(a < b) {
return -1;
}
return 0;
}
}


页面:

<s:set value="{10, 9, 8, 7, 6, 5, 4, 3, 2, 1}" var="list1" />
<s:bean name="com.capinfotech.util.IntegerComparator" id="integerComparator" />

<s:sort comparator="integerComparator" source="#list1">
<s:iterator>
<s:property/>
</s:iterator>
</s:sort>



输出结果:

    1 2 3 4 5 6 7 8 9 10


     实例2:包含复杂数据类型的集合排序示例

       对包含user的数据集合排序,首先定义一个排序器,根据年龄来排序:

   

package com.capinfotech.util;

import java.util.Comparator;

import com.capinfotech.model.User;

public class UserComparator implements Comparator<User> {

@Override
public int compare(User user1, User user2) {
if(user1.getAge().intValue() > user2.getAge().intValue()) {
return 1;
} else if(user1.getAge().intValue() < user2.getAge().intValue()) {
return -1;
}
return 0;
}

}


页面:

<%
List userList = new ArrayList();

User user1 = new User();
user1.setAge(40);
user1.setName("zhangsan");

User user2 = new User();
user2.setAge(30);
user2.setName("lisi");

User user3 = new User();
user3.setAge(20);
user3.setName("wangwu");

User user4 = new User();
user4.setAge(10);
user4.setName("maliu");

userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);

request.setAttribute("users", userList);

%>
<s:bean name="com.capinfotech.util.UserComparator" id="userComparator" />

<s:sort comparator="userComparator" source="#request.users">
<s:iterator>
<s:property/><br>
</s:iterator>
</s:sort>


输出结果:

  name:maliu, age:10
name:wangwu, age:20
name:lisi, age:30
name:zhangsan, age:40


6:subset标签

       用于获取指定集合的子集合

      属性:

        *count: 用于指定子集合中元素的个数

        *decider:用于指定实现过滤条件的对象,这个对象会按照过滤条件--检测源集合中的元素是否应该被放入到子集合中,指定过滤条件的类需要实现

         org.apache.Struts2.util.SubsetIteratorFilter.Decider接口

        *var:变量名称,就是将子集合保存在当前页的上下文pageContext中所指定的key值,以后可以通过该key值来访问。

        *source:用于指定源集合

         *start:用于指定从原集合的第几个元素开始截取,0代表第一个元素

  

简单示例1:

     

<s:set value="{1, 2, 3, 4, 5}" var="list" />
<s:subset source="#list" count="2" start="2">
<s:iterator>
<s:property/>
</s:iterator>
</s:subset>


输出结果:

   3 4


简单示例2,使用decider来截取

    *首先定义一个decider,

   

package com.capinfotech.util;

import org.apache.struts2.util.SubsetIteratorFilter.Decider;

public class StringLengthDecider implements Decider {

@Override
public boolean decide(Object element) throws Exception {
String value = element.toString();
if(value.length() == 1) { //如果字符串的长度为1,返回true
return true;
}
return false;
}

}


  *页面:

<s:bean name="com.capinfotech.util.StringLengthDecider" var="stringLengthDecider"/>
<s:set value="{'1', '2', '33', '4', '55', '6'}" var="list" />
<s:subset source="#list" start="1" decider="stringLengthDecider">
<s:iterator>
<s:property/>
</s:iterator>
</s:subset>


输出结果:

  2 4 6