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脚本,降低了该页面的后期维护成本。