Struts 2.x权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.6.2 改善输出页面

为了控制输出Struts 2的ValueStack中封装的值,Struts 2提供了大量的标签,其中比较常用的标签如下。

if:该标签支持标签体,如果if标签里判断的表达式返回真,则输出标签体内容。

else:该标签不能独立使用,它需要与if标签结合使用,如果if标签内判断的表达式返回假,则输出该标签里的标签体。

iterator:主要用于迭代输出某个集合属性的各个集合元素。

property:该标签用于输出指定的属性值。

关于Struts 2标签库更深入的使用,后面章节还会有更详细的介绍,故此处不再展开。通过使用上面的几个标签,替换showBook.jsp页面中的Java脚本,修改后的showBook.jsp页面代码如下。

程序清单:codes\02\struts2qs3\WEB-INF\content\showBook.jsp

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!-- 导入Struts 2标签库 -->
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title>作者李刚的图书</title>
</head>
<body>
<table border="1" style="width:360px">
    <caption>作者李刚的图书</caption>
  <!-- 迭代输出ValueStack中的books对象,其中status是迭代的序号 -->
  <s:iterator value="books" status="index">
  <!-- 判断序号是否为奇数 -->
  <s:if test="#index.odd == true">
  <tr style="background-color:#cccccc">
  </s:if>
  <s:else>
  <tr>
  </s:else>
      <td>书名:</td>
      <td><s:property/></td>
  </tr>
  </s:iterator>
</table>
</body>
</html>

上面的JSP页面使用了Struts 2标签库,因此必须在JSP页面的首部添加taglib指令,该taglib指令用于导入标签库。

提示:

如果需要使用某个标签库中的标签,则必须在页面的开始处导入该标签库。

页面中使用Struts 2的iterator标签迭代输出ValueStack中的books数组,并使用index变量来记录各数组元素的迭代状态。通过index可以判断序号是否为奇数,如果序号为奇数,则输出一个有背景色的表格行;否则输出一个无背景色的表格行。

再次向getBooks发送请求(在发送请求之前,必须先登录本系统),将看到如图2.6所示的界面。

图2.6 使用Struts 2标签改善后的输出界面

上面页面的输出效果与图2.5并没有太大的不同,只是使用不同颜色来分隔记录行。这也得益于Struts 2标签库的简洁。

2.5.4节中的JSP页面代码与本节页面代码的差异:前面的JSP页面中使用了大量的JSP脚本,让整个页面的代码看起来非常零乱,降低了可阅读性、可维护性;但本页面中仅使用Struts 2标签控制输出,完全消除了页面中的JSP脚本,降低了该页面的后期维护成本。