struts2控制标签

一、  控制标签

1、 if/elseif/else标签

使用原理和一般的一样,只要是在使用的过程中要注意格式,可以直接在jsp页面使用该标签。示例如下:

<s:set var="age" value="70"/>
    <s:if test="#age>60">
        老年人</s:if>
    <s:elseif test="#age>20">
        青年人</s:elseif>
    <s:else>
        小孩
        </s:else>

结果会输出老年人。

 

2、 iterator标签

该标签主要用于对集合进行迭代,类似于java中的迭代器。这里的集合包括List、Set和数组,也可以对Map集合进行迭代。使用该标签进行迭代输出时可以使用三个属性:

(1) value:这是一个可选的属性,value属性用于指定被迭代的集合,被迭代的集合通常使用OGNL表达式指定,如果没有使用该属性,则使用ValueStack栈顶的集合。

(2) var:这是一个可选的属性,指定集合里元素的ID,即相当于集合中每个元素的名称,迭代时通过该ID输出集合里的元素。(3) status:也是一个可选的元素,指定迭代时的IteratorStatus实例,通过该实例可判断当前迭代元素的属性。例如是否为集合中的第奇数个元素,为集合中的第几个元素。

代码示例:

<table border="1" width"200">
        <s:iterator value="{'张三','李四' , '小明', '小华'}" var="name" status="st"><br>
        <tr>
        <td>
            <s:property value="#st.count"/>
            <s:property value="name"/>
        </td>
        </tr>
        </s:iterator>
    </table>

结果:

 

其中,IteratorStatus实例有如下几个方法:

(1) int getCount():返回当前迭代了几个元素。

(2) int getIndex():返回当前迭代元素的索引。

(3) boolean  isEven():返回当前被迭代元素的索引是否为偶数。

(4) boolean  isFirst():返回当前别迭代元素的索引是否是第一个元素。

(5) boolean  isLast():返回当前被迭代元素的索引是否为最后一个元素。

(6) boolean  isOdd():返回当前被迭代元素的索引是否为奇数。

以下代码示例使用iterator标签迭代List对象、Map对象

 <table border="1" width="300">
         <s:iterator value="{'张三','李四',' 王二麻子',' 小华'}" var="name" status="st">
             <tr <s:if test="#st.odd">
                 style="background-color:#bbbbbb"
                 </s:if>>
                 <td><s:property value="name"/></td>
             </tr>
         </s:iterator>
     </table>
     
     <table border="1" width="300">
         <tr>
             <th>姓名</th>
             <th>编号</th>
         </tr>
         <s:iterator value="#{' 张三 ' : '1 ','李四 ' : '2 ' , '王二麻子 ' : '3 '}" var="score" status="st">
             <tr <s:if test="#st.odd">
                 style="background-color:#bbbbbb"</s:if>>
                 <td><s:property value="key"/></td>
                 <td><s:property value="value"/></td>
                 
         </s:iterator>
     </table>

结果:

上面的代码注意事项:在使用if/elseif/else标签时,if后面的test是固定的,不可更改。

迭代时可以直接使用property标签输出集合中的元素。

3、 append标签

该标签用于将多个集合对象拼接起来,组合成一个新的集合,从而允许通过一个<s:interator.../>标签就完成对多个集合的迭代。使用该标签时需要指定一个var属性,该属性确定拼接生成的新集合的名字,该集合被放入Stack  Context。另外,该标签还可以添加<s:param.../>子标签,每个子标签指定一个集合。而<s:append.../>标签则是将<s:param.../>指定的多个集合拼接成一个集合。

代码示例:

<s:append var="newlist">
          <s:param value="{' 张三' , '李四 ' , ' 王二麻子'}"/>
          <s:param value="{' 小明 ' , '  小华'  , ' 小芳'}"/>
       </s:append>
       <table border="1" width="300">
               <s:iterator value="#newlist" status="st" var="list">
                   <tr>
                       <td><s:property value="#st.count"/></td>
                       <td><s:property value="list"/></td>
                   </tr>
               </s:iterator>
       </table>

结果如图:

从运行结果就可以看出两个集合合并成一个集合输出了。

当然还可以使用append将多个Map对象拼接成一个新的Map对象,更甚至将一个Map对象和一个List对象拼接起来。

代码示例:

<s:append var="newlist">
          <s:param value="#{' 张三' :  ' 1 ' , '李四 ' : ' 2' , ' 王二麻子' :  '3 '}"/>
        <s:param value="#{'小明 ' , ' 小张 ', '  小华'}"/>
      </s:append>
      <table border="1" width="300">
          <s:iterator value="#newlist" var="list" status="st">
              <tr>
                  <td><s:property value="key"/> </td>
                  <td><s:property value="value"/> </td>
              </tr>
          </s:iterator>
      
      </table>

结果如图:

注意:在使用Map类型集合的时候要在集合前加上“ # ”,该语法格式表示创建一个Map类型的集合,这时OGNL表达式语言。一个List集合类型集合的语法为:{e1,e2,e3}。如果不加上#则不会显示内容。

 

4、 generator标签

使用该标签可以将指定字符串按指定分隔符分隔成多个子串,临时生成的多个子串可以使用iterator标签迭代输出。使用该标签可以指定如下几个属性:

(1) count:可选属性,指定生成集合中的元素总数,例如分隔后本来是可以有3个的,但设置count为2,那么最后的集合还是为2个。

(2) separator:必填属性,指定用于解析字符串的分隔符

(3) val:必填属性,指定被解析字符串

(4) converter:可选属性,指定一个转换器,该转换器负责将集合中的每个字符串转换成对象,通过转换器可以将一个字符串解析成一个对象。

(5) var:可选属性,指定该属性,则生成的Iterator对象放入Stack Context中

代码示例:

 <table border="1" width="300">
          <s:generator separator="," val="'你是谁,你在哪,你在干嘛'">
              <s:iterator >
                  <tr>
                      <td><s:property/></td>
                  </tr>
              </s:iterator>
          </s:generator>
      
      </table>
      

结果:


      

注意:在separator中的是中文的“ , ”,否则不会进行分隔。通过上示例可以看出,使用Iterator标签和property标签都是可以不需要参数的,直接进行迭代和显示。

 

5、 merge标签

该标签类似于append标签,用于将多个集合连接成一个集合,但拼接方式有区别。例如集合{1,2,3},{a,b,c}。append拼接后为{1,2,3,a,b,c},merge拼接后的数组为{1,a,2,b,3,c}。

 

6、 subset标签

该标签用于取得集合的子集,通过org.apache.struts2.util.SubsetIteratorFilter类提供实现,有如下几个属性:

(1) count:可选属性,指定子集中元素的个数,不指定该属性默认取得源集合的全部元素。

(2) source:可选属性,指定源集合,不指定该属性默认取得ValueStack栈顶的集合。

(3) start:可选属性,指定自己从源集合的第几个元素开始截取。默认从第一个开始,即默认值为0

(4) decider:可选属性:指定由开发者自己决定是否选中该元素。

(5) var:可选属性,指定该属性,则将生成的Iterator对象设置成page范围的属性。

代码示例:

<table border="1" width="300">
          <s:subset source="{'张三 ' , ' 李四' , ' 王五' , ' 小刘' , ' 小华'}" start="1" count="4">
              <s:iterator ><tr><td><s:property/></td></tr></s:iterator>
              
          </s:subset>
      </table>

结果:

 

7、 sort标签

用于对指定的集合元素进行排序,进行排序时必须提供自己的排序规则,实现自己的Comparator,该Comparator需要实现java.util.Comparator接口,使用该标签可指定如下几个属性:

(1) comparator:必填属性,指定进行排序的Comparator实例

(2) source:可选属性,指定被排序的集合,不指定默认对Value Stack栈顶的集合进行排序。

(3) var:可选属性,指定该属性,将生成的Iterator对象设置成page范围的属性,不放入Stack Value中。

代码示例:

定义Comparator的java类

package org.app;

import java.util.Comparator;

public class MyComparator  implements Comparator{

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

    @Override
    public int compare(Object o1, Object o2) {
        // TODO Auto-generated method stub
        //根据元素字符串长度来决定大小
        return o1.toString().length()-o2.toString().length();
    }

}

 

jsp中:

 <s:bean name="org.app.MyComparator" var="mycomparator"/>
      <s:sort comparator="#mycomparator" source="{'abcdefg' , 'abcde' , 'abc' , 'abcdef'}" var="sortedList">
          输出page范围的sortlist属性:<br/>
          ${pageScope.sortedList }
          <table border="1" width="300">
              <s:iterator>
                  <tr>
                      <td><s:property/> </td>
                  </tr>
              </s:iterator>
          </table>
      </s:sort>

结果:

从上面例子中可以看出,使用sort标签时要结合java类来实现如何排序。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值