Struts2 <s:lterator>标签的一个复杂应用 解析

官网对iterator标签的描述:

Description

Iterator will iterate over a value. An iterable value can be any of: java.util.Collection, java.util.Iterator,

Parameters
 
Name
Required
Default
Evaluated
Type
Description
idfalsefalseStringDeprecated(弃用). Use 'var' instead
statusfalsefalsefalseBooleanIf specified, an instanceof IteratorStatus will be pushed into stack upon each iteration
valuefalsefalseStringthe iteratable source to iterate over, else an the object itself will be put into a newly created List
varfalsefalseStringName used to reference the value pushed into the Value Stack

 

下面来看一段相关的代码:

   <s:form id="materialForm" action="addMaterial" theme="simple">
   <table>
   <tr>
   <td>材料名</td>
   <td>价格</td>
   <td>库存量</td>
   <td>过期日期</td>
   </tr>
   <s:iterator value="new int[4]" status="m">
   <tr>
   <td><s:textfield name="%{'materialList['+#m.index+'].material'}" /></td>
            <td><s:textfield name="%{'materialList['+#m.index+'].bid'}" /></td>
            <td><s:textfield name="%{'materialList['+#m.index+'].mount'}" /></td>
            <td><sx:datetimepicker name="%{'materialList['+#m.index+'].expireDate'}" /></td>
   </tr>
   </s:iterator>
   <tr>
   <td colspan="4"><s:submit value="提交"></s:submit>
   </tr>
   </table> 
   </s:form>

此段代码的页面显示为:

<s:iterator value="new int[4]"  status="m">解析:迭代创建一个新的包含4个元素的整型(只能是int或能直接转成int的类型如byte也可以,String、double就不行)数组集合,迭代的次数就是元素个数4,创建的Object将会放入此集合里面去,如果value="new int[3]",则页面只显示3行文本框。此迭代器的"迭代状态码"设为"m",每一次迭代对应一个状态数据,"迭代状态码"有属性index和count,其中"count" is 1-based, "index" is 0-based。

对于上面的代码name="%{ 'materialList['+#m.index+'].bid' }"(其中要传递的materialList是List<Material>类型的),解析:“%{}”:取大括号里面的OGNL表达式的字符串类型值,#m.index:取当前"迭代状态码"的index属性值,在第一次迭代时它的值就是0,materialList[x]:要去传递的materialList实例属性(此属性可能就是其他类的实例)的第x+1个元素,materialList[x].bid:即集合materialList实例的第x+1个元素的bid属性。materialList集合实例有4个Material类型元素,每个元素都有material、bid、mount、expireDate这四个属性。总的意思:创建一个文本框,它要提交的数据是materialList这个包含了Material元素(此元素又包含了相关属性)的集合实例。 

再看一个迭代输出的例子:

            <s:iterator value="materialList" >
            <tr>
            <td><s:property value="material" ></s:property></td>
            <td><s:property value="bid" ></s:property></td>
            <td><s:property value="mount" ></s:property></td>
            <td><s:property value="expireDate" ></s:property></td>
            </tr>
            </s:iterator>

以上代码是迭代输出materialList集合中Material类型元素中的所有属性值。虽然materialList中没有直接的material  bid  mount  expireDate属性,但它的Material类型的元素有,这样通过迭代materialList集合就可以输出最深处的属性值了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzyjr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值