struts2控制标签

10.3控制标签
10.3.1
10.3.2
10.3.3
10.3.4 generator标签
        使用generator 标签可以将指定字符串按指定分隔符分成多个子串,临时生成的多个子串可以使用iterator标签来迭代输出。可以这样理解:generator将一个字符串转化成一个集合。在该标签的标签体内,整个临时生成的集合将位于ValueStack的顶端,蛋一旦该标签结束,该集合将被移出ValueStack
        generator 标签的属性:
        1,count :可选属性,该属性指定生成集合中元素的总数。
        2,separator :必填属性,指定用于解析字符串的分隔符。
        3,val :必填属性,指定被解析的字符串。
        4,converter :可选属性,指定一个转换器,该转换器负责将集合汇总的每个字符串转换成对象
        5,id :可选属性,如果指定了该属性,则将生成的集合放在pageContext属性中
代码示例
<!-- 使用s:generator标签将一个字符串解析成集合-->
<s:generator val = " 'Spring2.0宝典,轻量级J2EE企业应用实战,基于J2EE的Ajax宝典' "
      separator = ",">
<!-- 在generator标签内,该集合位于valuestack的栈顶,故此处迭代就是临时生成的集合-->
<s: iterator status = "st ">
     <!-- 根据当前迭代项索引的奇偶来决定是否使用CSS样式-->
     < tr <s:if    test="#st.odd" > style ="background-color:#bbbbbb"</s:if> >
              <td><s:property/></td>
      </tr>
</s:iterator>
</s:generator>
下面代码使用generator标签,使用了count和id属性,如果指定了count属性,意味着集合中最多只能包含count个元素(就是前count个元素),指定了id属性,就可以将临时生成的集合放置到pageContext属性中。代码如下:
<s:generator val = " 'Spring2.0宝典,轻量级J2EE企业应用实战,基于J2EE的Ajax宝典' "
      separator = ","    id="bookes"  count="2"/>
<%
         java.util.Iterator  i  =  (java.util.Iterator)pageContext.getAttribute("books") ;
         while( i.hasNext() ) {
         String s = (String) i.next(); %>
         <tr><td><%=s%></td></tr>
          <%}
%>

10.3.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标签的使用示例大致相同。

10.3.6    subset标签
     subset 标签用于取得集合的子集,该标签的底层通过org.apache.Struts2.util.Subset.IteratorFilter类提供实现。
使用subset 标签有如下几个属性:
1,count :可选,该属性指定了子集中元素的个数。默认是取得所有源集合的全部元素。
2,source :可选,指定源集合。默认取得valuestack栈顶的集合
3,start :可选,该属性指定了子集从源集合的第几个元素开始截取。默认从第一个元素,即从0开始截取。
4,decider :可选,指定开发者自己决定是否选中该元素
-----------------------------------------------------------------------------------------------------------------------------------------------------------
!!注意:在subset标签内时,subset标签生成的子集放在valuestack的栈顶,该标签结束,生成的子集被移出valuestack栈。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
下面代码使用subset标签截取了源集合形成子集
<table border="1" width="200">
<!-- 使用subset标签截取目标集合的三个元素,从第一个开始-->
<s:subset source=
"{'java培训基地', 'Spring2.0宝典', '轻量级J2EE企业应用实战', '基于J2EE的Ajax宝典', 'webwork实战' }"
start=“1” count=“3” >
<!--使用iterator标签来迭代目标集合,因为没有指定vlaue属性值,故迭代valuestack栈顶的元素-->
<s:iterator status="st">
   <!--根据当前迭代元素的索引是否为奇数,决定是否使用CSS样式-->
 < tr <s:if    test="#st.odd" > style ="background-color:#bbbbbb"</s:if> >
              <td><s:property/></td>
</tr>
<s:iterator>
<s:subset>
</table>
除此之外,如果开发者需要实现自己的街区标准,则需要实现一个Decider 类,该类需要实现SubsetIteratorFilter.Decider接口。实现该类时,需要实现一个boolean decide(Object element)方法,如果返回时真,表明该元素被选入子集中。看下面的Decider类代码:
public class MyDecider implements SubsetIteratorFilter.Decider
{
        public boolean decide(Objecit){
               String str = (String)element;
               //如果集合元素(字符串)中包含J2EE子串,即可被选入子集
               return str.indexOf("J2EE") > 0 ;
        }
}
下面看看如何在JSP使用Decider实例来过滤集合
<!--定义一个Decider实例-->
<s:bean id="mydecider" name="lee.MyDecider">
<table border="1" width="200">
<!--使用自定义的Decider实例来截取目标集合-->
<table border="1" width="200">
<s:subset source=
"{'java培训基地', 'Spring2.0宝典', '轻量级J2EE企业应用实战', '基于J2EE的Ajax宝典', 'webwork实战' }"
decider = “#mydecider”>
<s:iterator status="st">
   <!--根据当前迭代元素的索引是否为奇数,决定是否使用CSS样式-->
 < tr <s:if    test="#st.odd" > style ="background-color:#bbbbbb"</s:if> >
              <td><s:property/> </td>
</tr>
<s:iterator>
<s:subset>
</table>

10.3.7 sort标签
        sort 标签对于指定的集合元素进行排序,排序时,必须提供自己的排序规则,即实现自己的Comparator,自己的Comparator需要实现java.util.Comparator接口。
       使用sort 标签时可指定如下几个属性:
       1,comparator :必填属性,指定进行排序的Comparator实例。
       2,source :可选属性,指定被排序的集合。默认对valuestack栈顶的集合进行排序。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
!!注意:在sort 标签内时,sort标签生成的子集放在valuestack的栈顶,该标签结束,生成的子集被移出valuestack栈。
---------------------------------------------------------------------------------------------------------------------------------------------------------
下面是本实例应用中的Comparator类的代码:
public class MyComparator implements Comparator
{     //决定两个元素大小的方法
      public int compare (Object element1 ,  Object element2 )
      {
            return ((String)element1).length() - ((String)element2).length();
      }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值