Struts2 官方教程:控制标签(Control Tags)

本篇教程的示例代码可以在github获得。

介绍

Struts2集中可以在页面中使用的控制标签。本篇教程会讨论和展示如何使用Struts2的if和iterator标签。更多关于控制标签的信息请移步标签引用(tags reference)

Struts2的if标签

在示例引用的thankyou.jsp页面,可以有这样的内容:

thankyou.jsp中 Struts2 的if标签

<s:if test="personBean.over18">
    <p>你达到了投票的年龄!</p>
</s:if>
<s:else>
    <p>你尚未达到投票年龄!</p>
</s:else>

Struts2的if标签有test属性。test属性的取值必须等于true或false。如果是true,在s:if标签之间的内容会执行。否则,在s:else标签之间的内容会执行。注意,s:else标签在s:if标签的结束之后,并且s:else标签并不是必须的。
在上面的示例中,Struts框架会调用动作类(EditAction)的getPersonBean方法。利用方法返回的Person实例,框架随后会调用Person类的isOver18方法;这个方法反悔了一个boolean值,用来决定test的结果是true还是false。
test属性的取值必须是等于true或者false的表达式,但不需要一个返回boolean取值的方法调用。例如,在thankyou.jsp的s:if标签可以有更复杂的表达式:

<s:if test="personBean.carModels.length > 1">
    <p>Car models
</s:if>
<s:else>
    <p>Car model
</s:else>

上面这些标记的目的是使用“Car model”或者“Car models”,依赖于用户在edit页面中选择了多少个车模。所以test属性的取值获得carModels字符串数组的长度,并且将其与1进行对比。如果大于1,正确的语法是“Car models”,否则应当是“Car model”。

Struts2的迭代器(iterator)标签

Struts2 的迭代器标签对集合中的每个成员进行遍历。在thankyou.jsp可以有这样的标签:

<table style="margin-left:15px">
    <s:iterator value="personBean.carModels">
        <tr><td><s:property /></td></tr>
    </s:iterator>
</table>

这段代码的目的是创建一个显示一行被用户在edit页面中选中的车模的HTML表格。用户在edit页面选中的车辆模型被存储在(Person类的)一个personBean实例的carModels域(一个字符串数组)中。
迭代器标签有一个value属性,必须等于一个集合(Array,List,Map)。
内嵌于iterator标签的s:property标签被用来在每次迭代器循环在每个集合内元素时,显示集合里的值。因为这个集合时一个字符串对象的数组,s:property标签不糊i需要指定一个value属性。默认的s:property标签会为集合中的元素显示单独的字符串。
如果集合包含了有多个域的对象实例,那么需要使用s:property标签的value属性来决定显示哪个域。例如:

<table style="margin-left:15px">
    <s:iterator value="states">
        <tr>
        <td><s:property value="stateAbbr" /></td>
        <td><s:property value="stateName" /></td>
        </tr>
    </s:iterator>
</table>

迭代器标签的取值是states,这会让Struts2框架调用动作类(EditAction.java)的getStates方法。getStates方法返回了一个State对象的列表。State类有两个域:stateAbbr和stateName,都有对应的get方法。迭代器会遍历每个存储在集合中的State对象。循环中每次访问,Struts2框架会有一个对当前的State对象引用,并且调用当前State对象的getStateAbbr和getStateName方法。

另外的迭代器属性

Struts2迭代器标签有其它可以用来指定开始以及结束取值的属性,让迭代器标签仅仅遍历集合中的一部分元素。阅读迭代器标签获得更多信息。

猜你喜欢

转载自blog.csdn.net/u010930289/article/details/77125672