目录
Struts2标签库
对于一个MVC框架而言,重点是实现两部分:业务逻辑控制器部分和视图页面部分。Struts2作为一个优秀的MVC框架,也把重点放在了这两部分上。控制器主要由Action来提供支持,而视图则是由大量的标签来提供支持。
-
概述
在JavaWeb中,Struts2标签库是一个比较完善,而且功能强大的标签库,它将所有标签都统一到一个标签库中,从而简化了标签的使用,它还提供主题和模板的支持,极大地简化了视图页面代码的编写,同时它还提供对Ajax的支持,大大的丰富了视图的表现效果。与JSTL(JSP Standard Library,JSP标准标签库)相比,Struts2标签库更加易用和强大。
-
分类
早期的JSP页面需要嵌入大量的Java脚本来进行输出,这样使得一个简单的JSP页面加入了大量的代码,不利于代码的可维护性和可读性。随着技术的发展,逐渐的采用标签库来进行JSP页面的开发,这使得JSP页面能够在很短的时间内开发完成,而且代码通俗易懂,大大的方便了开发者,Struts2的标签库就是这样发展起来的。
Struts框架对整个标签库进行了分类,按其功能大致可以分为两类
由图中可以看出,Struts2标签库主要分为两类:普通标签和UI标签。普通标签主要是在页面生成时,控制执行的流程。UI标签则是以丰富而可复用的HTML文件来显示数据。
普通标签又分为控制标签(Control Tags)和数据标签(Data Tags)。控制标签用来完成条件逻辑、循环逻辑的控制,也可以用来做集合的操作。数据标签用来输出后台的数据和完成其他数据访问功能。
UI标签又分为表单标签(Form Tags)、非表单标签(Non-Form Tags)和Ajax标签。表单标签主要用来生成HTML页面中的表单元素,非表单标签主要用来生成HTML的<div>标签及输出Action中封装的信息等。Ajax标签主要用来提供Ajax技术支持。
-
使用
Struts2标签库被定义在struts-tags.tld文件中,我们可以在struts-core-2.3.24.jar中的META-INF目录下找到它。要使用struts2的标签库,一般只需要在JSP文件中使用taglib指令导入Struts2标签库。
<%@ taglib uri="/struts-tags" prefix="s" %>
-
控制标签
分支逻辑控制
<s:if> <s:elseif> <s:else>用于程序的分支逻辑控制
<s:if test="表达式1">
标签体
</s:if>
<s:elseif test="表达式2">
标签体
</s:elseif>
<s:else>
标签体
</s:else>
循环遍历
<s:iterator>,主要用于对集合中数据进行迭代,它可以根据条件遍历集合中的数据
属性 | 是否必须 | 默认值 | 类型 | 描述 |
begin | 否 | 0 | Integer | 迭代数组和集合的起始位置 |
end | 否 | 数组或集合的长度减1,假如step为负则为0 | Integer | 迭代数组和集合的结束位置 |
status | 否 | False | Boolean | 迭代过程中的状态 |
step | 否 | 1 | Integer | 指定每一次迭代后索引增加的值 |
value | 否 | 无 | String | 迭代的数据或集合对象 |
var | 否 | 无 | String | 将生成的Iterator设置为page范围的属性 |
id | 否 | 无 | String | 指定了集合元素的id,现已用var代替 |
在表中,如果在<s:iterator>标签中指定status属性,那么通过该属性可以获取迭代过程中的状态信息,如:元素数、当前索引值
方法 | 说明 |
st.count | 返回当前已经遍历的集合元素的个数 |
st.first | 返回当前遍历元素是否为集合的第一元素 |
st.last | 返回当前遍历元素是否为集合的最后一个元素 |
st.index | 返回遍历元素的当前索引值 |
st.even | 返回当前遍历的元素的索引是否为偶数 |
st.odd | 返回当前遍历的元素的索引是否为奇数 |
-
数据标签
数据标签主要用于各种数据访问相关的功能以及Action的调用
property
<s:property>标签用于输出指定的值,通常输出的是value属性指定的值,该标签的属性如下
属性 | 是否必选 | 说明 |
id | 否 | 指定该元素的标识 |
default | 否 | 如果要输出的属性值为null,则显示default属性的指定值 |
escape | 否 | 指定是否忽略HTML代码 |
value | 否 | 指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值 |
a
<s:a>标签用于构造HTML页面中的超链接,其使用方式与HTML中的<a>标签类似
属性 | 是否必须 | 类型 | 描述 |
action | 否 | String | 指定超链接Action地址 |
href | 否 | String | 超链接地址 |
namespace | 否 | String | 指定Action地址空间命名 |
id | 否 | String | 指定其id |
method | 否 | String | 指定Action调用方法 |
debug
<s:debug>标签用于在调试程序时输出更多的调试信息,主要输出ValueStack和StackContext中的信息,该标签只有一个id属性
在使用debug标签后,网页中会生成一个[Debug]的链接,单击该链接,网页中将输出各种服务对象的信息
-
表单标签
<s:form>、<s:submit>、<s:textfield>、<s:textarea>、<s:password>、<s:radio>、<s:checkboxlist>、<s:select>、<s:hidden>、<s:reset>
<s:form action="DemoAction" namespace="/" theme="xhtml" >
<s:textfield name="name" label="用户名" ></s:textfield>
<s:password name="password" label="密码" ></s:password>
<s:radio list="{'男','女'}" name="gender" label="性别" ></s:radio>
<s:radio list="#{1:'男',0:'女'}" name="gender" label="性别" ></s:radio>
<s:checkboxlist list="#{2:'乒乓球',1:'羽毛球',0:'篮球'}" name="habits" label="爱好" ></s:checkboxlist>
<s:select list="#{2:'大专',1:'本科',0:'硕士'}" headerKey="" headerValue="---请选择---" name="edu" label="学历" >
</s:select>
<s:file name="photo" label="照片" ></s:file>
<s:textarea name="desc" label="个人简介" ></s:textarea>
<s:submit value="提交" ></s:submit>
</s:form>