struts2中iterator标签的相关使用

English Title:(Turn) of label of the Iterator in Struts2 relevant use

在说明s:iterator标签的使用前,先了解下struts2中的Value Stack。这里参考了webwork中对Value Stack的描述,由于struts2是在webwork的基础上进行升级的,因此webwork对于Value Stack的表述同样适用于struts2。在这里不描述Value Stack具体做什么,但有两点需要注意:

 一个value stack本质上是一个List;
在栈中调用[n]将返回一个从位置n开始的子栈;
对于2举个例子说明。假定Value Stack包含了[model,action,others],那么

[0] --- 返回 [model,action,others];
[1] --- 返回 [action,others];
[2] --- 返回 [others];
现在将开始介绍s:iterator的一些使用。以下代码片段均在开发环境eclipse3.4 wtp、tomcat5.5、jdk5上使用struts2.1.6测试通过。

1) 、访问 days

defined  List<String>  days   ["Monday","Thursday","Friday","Sunday"]

view plaincopy to clipboardprint?
<s:iterator value="days"><s:property /></s:iterator> 
<s:iterator value="days"><s:property /></s:iterator>

2) 、使用 top 关键字使用(过滤掉Monday)

defined  List<String>  days   ["Monday","Thursday","Friday","Sunday"]

view plaincopy to clipboardprint?
<s:iterator value="days"> 
            <s:if test="top!='Monday'"> 
                <s:property /> 
            </s:if> 
        </s:iterator> 
<s:iterator value="days">
            <s:if test="top!='Monday'">
                <s:property />
            </s:if>
        </s:iterator>

top 指代当前迭代元素,可以为对象;
这里的top可用[0].top替代,但不能使用[0]。[0]代表整个栈对象。如果单纯调用[0]将会调用其toString()方法输出对象信息;

3)、使用 last / first 关键字使用

defined  String[][] aTs = { { "一", "二", "三", "四" },{ "一一", "二二", "三三", "四四"} };

view plaincopy to clipboardprint?
<!--遍历二维数组,The trick here is to use 'top' as the value for the inner iterator--> 
          <s:iterator value="aTs" status="of"> 
          <s:if test="#of.last"><br/></s:if> 
          <s:iterator value="top"> 
<!--亦可用[0].top替代。如果单纯用[0],则会同时打印该处栈对象信息--> 
         <s:property /> 
          </s:iterator> 
          </s:iterator> 
<!--遍历二维数组,The trick here is to use 'top' as the value for the inner iterator-->
          <s:iterator value="aTs" status="of">
       <s:if test="#of.last"><br/></s:if>
       <s:iterator value="top">
<!--亦可用[0].top替代。如果单纯用[0],则会同时打印该处栈对象信息-->
   <s:property />
       </s:iterator>
          </s:iterator>  


iterator 标签中的status属性代表当前迭代的位置;
#of.last用于判断当前是否跌到的最后一个元素;
last返回一个boolean类型;
first 返回一个boolean类型;
4)、使用 odd / even 关键字

下面的例子要实现每行输出颜色不同的效果。

defined  List<String>  days   ["Monday","Thursday","Friday","Sunday"]

view plaincopy to clipboardprint?
       <!--奇数行显示为红色,偶数行显示为绿色--> 
       <s:iterator value="days" status="offset"> 
    <s:else> 
        <s:if test="#offset.odd==true"> 
            <li style="color: red" mce_style="color: red"><s:property /></li> 
        </s:if> 
        <s:else> 
            <li><s:property /></li> 
        </s:else> 
    </s:else> 
</s:iterator> 
        <!--奇数行显示为红色,偶数行显示为绿色-->
        <s:iterator value="days" status="offset">
  <s:else>
   <s:if test="#offset.odd==true">
    <li style="color: red" mce_style="color: red"><s:property /></li>
   </s:if>
   <s:else>
    <li><s:property /></li>
   </s:else>
  </s:else>
 </s:iterator>

odd关键字用来判断当前迭代位置是否为奇数行。odd返回boolean类型;
evne关键字用来判断当前迭代位置是否为偶数行。even返回boolean类型
5)、总结下,当声明iterator的status属性时,通过#statusName.method 可以使用以下方法:

even : boolean - 如果当前迭代位置是偶数返回true
odd : boolean - 如果当前迭代位置是奇数返回true
count : int - 返回当前迭代位置的计数(从1开始)
index : int - 返回当前迭代位置的编号(从0开始)
first : boolean - 如果当前迭代位置是第一位时返回true
last : boolean - 如果当前迭代位置是最后一位时返回true
modulus(operand : int) : int - 返回当前计数(从1开始)与指定操作数的模数
6)、最后再来看下在iterator中调用value stack的用法。

假定countries是一个List对象,每一个country有一个name属性和一个citys List对象,并且每一个city也有一个name属性 。那么我们想要在迭代cities是访问countries的name属性就的用如下方式:


view plaincopy to clipboardprint?
<s:iterator value="countries"> 
    <s:iterator value="cities"> 
        <s:property value="name"/>, <s:property value="[1].name"/><br> 
    </s:iterator> 
</s:iterator> 
           <s:iterator value="countries">
               <s:iterator value="cities">
                   <s:property value="name"/>, <s:property value="[1].name"/><br>
               </s:iterator>
           </s:iterator>

这里的 <ww:property value="name"/>取的是ctiy.name;<ww:property value="[1].name"/>取得是country.name
<ww:property value="[1].name"/> 等价于 <ww:property value="[1].top.name"/>
we refer to a specific position on the stack: '[1]'. The top of the stack, position 0, contains the current city, pushed on by the inner iterator; position 1 contains the current country, pushed there by the outer iterator.(city处于当前栈,即top或者[0],而[1]指明了外层iterator对象,即country)
 '[n]'标记引用开始位置为n的子栈(sub-stack),而不仅仅是位置n处的对象。因此'[0]'代表整个栈,而'[1]'是除top对象外所有的栈元素。

本文来自CSDN博客,转载请标明出处:

(责任编辑:admin)

==========English==========

Showing S:iBefore the use of Terator label, understand the Value Stack in next Struts2 first. Consulted be opposite in Webwork here the description of Value Stack, because Struts2 undertakes upgrading on the foundation of Webwork, because of this Webwork to Value Stack state apply to Struts2 likewise. Do not describe Value Stack here specific what to do, but have needed to notice at 2 o'clock:

 A Value Stack is a List substantially;
Call in inn [N] will return to begin from positional N child inn;
To 2 lift an example specification. Assume Value Stack was included [Model, action, others] , so

[0]---Return [Model, action, others] ;
[1]---Return [Action, others] ;
[2]---Return [Others];
Will begin to introduce S:i nowOf Terator a few use. Extract of the following code all is developing environmental Eclipse3.4 Wtp, Tomcat5.5, Jdk5 to go up use Struts2.1.6 test is passed.

Days of 1) , visit

Defined List<String> Days  ["Monday" , "Thursday" , "Friday" , "Sunday" ]

View Plaincopy To Clipboardprint?
<s:iTerator Value="days"><s:pRoperty /></s:iTerator> 
<s:iTerator Value="days"><s:pRoperty /></s:iTerator>

Key word of 2) , use Top is used (filter Monday)

Defined List<String> Days  ["Monday" , "Thursday" , "Friday" , "Sunday" ]

View Plaincopy To Clipboardprint?
<s:iTerator Value="days"> 
           <s:iF Test="top! ='Monday'"> 
               <s:pRoperty /> 
           </s:iF> 
       </s:iTerator> 
<s:iTerator Value="days">
           <s:iF Test="top! ='Monday'">
               <s:pRoperty />
           </s:iF>
       </s:iTerator>

Top points to element of acting current iteration, can be an object;
The Top here is usable [0].top is replaced, but cannot use [0] . [0] represents whole inn target. If pure call [0] will call its ToString() method to export target information;

Key word of 3) , use Last / First is used

Defined One " of String[][] ATs = {{" , "2 " , "3 " , "4 " } , {" one by one " , "22 " , "33 " , "44 "} };

View Plaincopy To Clipboardprint?
< ! - - all over all previous 2 dimension group, the Trick Here Is To Use 'top' As The Value For The Inner Iterator- - > 
         <s:iTerator Value="aTs" Status="of"> 
         <s:iF Test="#of.last"><br/></s:iF> 
         <s:iTerator Value="top"> 
< ! - - Yi Ke is used [0].top is replaced. If pure with [0] , can print information of target of the place inn at the same time- - > 
        <s:pRoperty /> 
         </s:iTerator> 
         </s:iTerator> 
< ! - - all over all previous 2 dimension group, the Trick Here Is To Use 'top' As The Value For The Inner Iterator- - >
         <s:iTerator Value="aTs" Status="of">
      <s:iF Test="#of.last"><br/></s:iF>
      <s:iTerator Value="top">
< ! - - Yi Ke is used [0].top is replaced. If pure with [0] , can print information of target of the place inn at the same time- - >
  <s:pRoperty />
      </s:iTerator>
         </s:iTerator>  

The Status attribute in Iterator label represents the position of current iteration;
#of.last is used at the last element that whether judgement drops currently; Last returns; of type of a BooleanFirst returns; of type of a Boolean
Key word of 4) , use Odd / Even

The example below should achieve the result with every output different color.

Defined List<String> Days  ["Monday" , "Thursday" , "Friday" , "Sunday" ]

View Plaincopy To Clipboardprint?
      < ! - - odd travel shows for red, even travel shows for green- - > 
      <s:iTerator Value="days" Status="offset"> 
   <s:eLse> 
       <s:iF Test="#offset.odd==True"> 
           <li Style="color: Red" Mce_style="color: Red"><s:pRoperty /></li> 
       </s:iF> 
       <s:eLse> 
           <li><s:pRoperty /></li> 
       </s:eLse> 
   </s:eLse> 
</s:iTerator> 
       < ! - - odd travel shows for red, even travel shows for green- - >
       <s:iTerator Value="days" Status="offset">
  <s:eLse>
   <s:iF Test="#offset.odd==True">
    <li Style="color: Red" Mce_style="color: Red"><s:pRoperty /></li>
   </s:iF>
   <s:eLse>
    <li><s:pRoperty /></li>
   </s:eLse>
  </s:eLse>
 </s:iTerator>

Odd key word uses judgement whether is current iteration position odd travel. Odd returns Boolean type;Evne key word uses judgement whether does current iteration position go for even number. Even returns Boolean type
Below 5) , summary, when the Status attribute of statement Iterator, pass #statusName.method to be able to use the following method:

Even: If Boolean - is current iteration position is even number returns TrueOdd: If Boolean - is current iteration position is odd return TrueCount: The computation that Int - returns current iteration position (from 1 begin)Index: The number that Int - returns current iteration position (from 0 begin)First: If Boolean - is current iteration position is the first when return TrueLast: If Boolean - is current iteration position is last when return TrueModulus(operand: Int) : Int - returns current count (from 1 begin) with the modulus that appoints operand
The 6) , usage that see next is in in Iterator call Value Stack finally again.

Assume Countries is object of a List, each Country has attribute of a Name and boy or girl friend of a Citys List, and each City also has property of a Name. So we want to be in the Name attribute that iteration Cities is visit Countries with following means:

View Plaincopy To Clipboardprint?
<s:iTerator Value="countries"> 
   <s:iTerator Value="cities"> 
       <s:pRoperty Value="name"/> , <s:pRoperty Value="[1].name"/><br> 
   </s:iTerator> 
</s:iTerator> 
          <s:iTerator Value="countries">
              <s:iTerator Value="cities">
                  <s:pRoperty Value="name"/> , <s:pRoperty Value="[1].name"/><br>
              </s:iTerator>
          </s:iTerator>

The <ww:p hereWhat Roperty Value="name"/> takes is Ctiy.name;<ww:pRoperty Value="[1].name"/> is obtained is Country.name
<ww:pRoperty Value="[1].name"/>Equal in value at <ww:pRoperty Value="[1].top.name"/>We Refer To A Specific Position On The Stack: '[1]' . The Top Of The Stack, position 0, contains The Current City, pushed On By The Inner Iterator; Position 1 Contains The Current Country, pushed There By The Outer Iterator. (City is in current inn, namely Top or [0] , and [1] shows palpability is outer Iterator object, namely Country)
 '[n]' mark cites begin the position to be N child inn (Sub-stack) , is the target that positional N locates not just. Because this '[0]' represents whole inn, and '[1]' is all inn elements outside dividing Top target.

The article comes from CSDN rich guest, reprint indicate please provenance:

(Responsibility edits: Admin)

==========回复|reply==========

==========English==========
N/A<!-- //正文结束 -->

你可能感兴趣的:(Webwork,UP,Go)