一、数据标签的应用
(1)。property标签
property标签用于获取数据值,并将数据值直接输出到页面之中,其中属性如下
default 可选、escape可选、 escapeJavaScript可选、value可选
(2)。set标签
set标签用于定义一个变量,通过此标签可以为所定义的变量赋值,以及设置变量的作用域(application、request、session)。默认情况下,通过set标签定义的变量被放置到值栈之中。set标签所包含的属性及说明如下表
名称 是否必须 类型 说明
scope 可选 String 设置变量使用域,可以是application、request、session、page或action,默认值为action
value 可选 String 设置变量的值
var 可选 String 定义变量的名称
set标签中还包含id属性与name属性,这两个属性已经过时了
set标签的使用
<s:set var="uesrname" value="测试set标签" scope="request"><s:set>
<s:property defalut="没有数据!" value="#request.username"/>
(3)。a标签
a标签用于构建一个超链接,a标签属性及说明
名称 是否必须 类型 说明
action 可选 String 将超连接的地址指向action
href 可选 String 超连接地址
id 可选 String 设置HMTL中的属性名称
method 可选 String 如果超链接的地址指向action,method同时可以为action声明所调用的方法
namespace 可选 String 如果超链接的地址指向action,namespace可以为action声明名称空间
(4)。param标签
param标签主要用于对参数赋值,它可以当作其他标签的子标签。param标签属性及说明
名称 是否必须 类型 说明
name 可选 String 设置参数名称
value 可选 Object 设置参数数值
(5)。action标签
action标签,它用于执行一个Action请求。当在一个JSP页面中通过action标签执行Action请求时,可以将Action的返回结果输出到当前页面之中,也可以不输出,其标签属性及说明
名称 是否必须 类型 说明
executeResult 可选 String 是否使用Action返回到执行结果,默认值为false
flush 可选 boolean 输出结果是否刷新,默认值为true
ignoreContextParams 可选 boolean 是否将页面请求参数,传入被调用的Action,默认值为false
name 必须 String Action对象所映射的名称,即struts.xml中配置的名称
namespace 可选 String 指定名称空间的名称
var 可选 String 引用引action的名称
(6)。push标签
push标签用于将对象或值压入值栈之中放置到顶部。因为值栈中的对象可以直接调用的,所以,push标签主要是简化操作。用于声明压入值的对象,其使用方法如下:
<s;push value="#request.student"></s:push>
(7)。date标签
date标签用于格式化日期时间
名称 是否必须 类型 说明
format 可选 String 设置格式化日期的样式
name 必须 String 日期值
nice 可选 boolean 是否输出给定日期与当前日期之间的时差,默认值为false,不输出时差
var 可选 String 格式化时间的名称变量,通过此变量可以对其进行引用
(8)。include标签
Struts2的include标签的作用类型于JSP中的<include>动作标签,也用于包含一个页面,但Struts2的include标签的功能更加强大,它可以通过param标签向目标页面中传递请求参数。
<%@include file="/pages/common/common_admin.jsp"%>
(9)。url标签
一个Action对象的URL映射地址包含称名称空间、调用方法等多个参数,这样的URL可以直接进行编码。也可以使用Struts2框架提供的url标签自动生成URL地址。
名称 是否必须 类型 说明
action 可选 String Action对象的地址映射URL,也就是说Action对象的访问地址
anchor 可选 String 此URL的锚点
encode 可选 boolean 是否参数进行编码,默认值为true
escapeAmp 可选 String 是否将“&”转义为“&”
forceAddSchemeHostAndPort 可选 boolean 是否添加URL的主机地址及端口号,默认值为false
includeContext 可选 boolean 生成URL是否包含上下文路径,默认值为true
includeParams 可选 String 是滞包含可选参数,它的可选值为none、get、all,默认值为none
method 可选 String 指定请求Action对象所调用的方法
namespace 可选 String 指定请示Action对象映射地址的名称空间
scheme 可选 String 指定生成URL所使用的协议
value 可选 String 指定生成URL的地址值
var 可选 String 定义生成URL变量名称,可以通过此名称引用URL
二、控制标签的应用
(1)、if标签
if标签是Struts2提供一个流程控制标签,与Java语言相同,Struts2的标签同时支持if、else if、else的语句判断其标签如下:
<s:if>
用于在满足某个条件下的情况下,执行标签体中的内容,<s;if>标签可以单独使用
<s:elseif>
此标签需要与<s;if>标签配合使用,不不满足<s:if>标签中条件的情况下,判断是否满足<s;elseif>标签中的条件,如果满足引标签中的条件,那么将执行<s:elseif>标签体中的内容。
<s:else>
些需要与<:if>标签或<s:elseif>标签配合使用,当不满足所有条件的情况下,可以使用<s;else>标签来执行引标签中的内容。
<s:if test="表达式(布尔值)">
输出结果。。。
</s:if>
<s:elseif test="表达式(布尔值)">
输出结果。。。
</s:elseif>
可以使用多个<s:elseif>
...
<s:else>
输出结果。。。
</s:else>
(2)、iterator标签
它可以根据循环条件,遍历数组和集合类中的所有或部分数据,iterator标签所包含的属性如下
名称 是否必须 类型 说明
begin 可选 Integer 指定迭代数组或集合的起始位置,默认值0
end 可选 Integer 指定迭代数组或集合的结束位置,默认为集合或数组的长度
status 可选 String 迭代过程中的状态
step 可选 Integer 设置迭代的步长,指定此值,每一次迭代后,其值将在原来索引值的基础上增加step值,默认1
value 可选 String 指定迭代的集合或数组对象
var 可选 String 设置迭代元素的变量,如果指定此属性,所迭代的变量将压入到值栈之中
在iterator标签的属性中,status属性用于获取迭代过程中的状态信息。在Struts2框架的内部结构中,status属性实质是获取了Struts2封装的一个迭代状态的对象,此对象为org.apache.struts.views.jsp.IteratorStatus,通过些对象可以获取到迭代过程中的如下信息。
**元素数
IteratorStatus对象提供了getCount()方法,来获元素数,如果status属性设置 为“st”,通过“st.count”获取元素数
**是否为第一个元素
IteratorStatus对象提供了isFirst()方法,来判断是否为第一个元素,如果status属性设置 为“st”,通过“st.first”获取是否为第一个元素
**是否为最后一个元素
IteratorStatus对象提供了isLast()方法,来判断是否为最后个元素,如果status属性设置 为“st”,通过“st.last”获取是否为最后一个
**当前索引
IteratorStatus对象提供了getIndex()方法,来获取当前索引,如果status属性设置 为“st”,通过“st.index”获取当前索引
**索引值是否为偶数
IteratorStatus对象提供了isEvetn()方法,来判断当前索引是否为偶数,如果status属性设置 为“st”,通过“st.even”判断当前索引值是否为偶数
**索引值是否为奇数
IteratorStatus对象提供了isOdd()方法,来判断当前索引是否为奇数,如果status属性设置 为“st”,通过“st.odd”判断当前索引值是否为奇数
三、表单标签的应用
(1)、常用的表单标签与通用属性
常用的表单标签及说明
名称 说明
form标签 用于生成一个form表单
hidden标签 用于生成一个HTML中的隐藏表单元素,相当于使用HTML代码<input type="hidden">
textfield标签 用于生成一个HMTL中的文本框元素,相当于使用HMTL代码<input type="text">
password标签 用于生成一个HMTL中的密码元素,相当于使用HMTL代码<input type="password">
radio标签 用于生成一个HMTL中的单选按钮元素,相当于使用HMTL代码<input type="radio">
select标签 用于生成一个HMTL中的下拉列表元素,相当于使用HMTL代码<select><option></option></select>
textarea标签 用于生成一个HMTL中的文本框元素,相当于使用HMTL代码<textarea></textarea>
checkbox标签 用于生成一个HMTL中的文本框元素,相当于使用HMTL代码<input type="checkbox">
checklist标签 用于生成一个HMTL中的文本框元素,相当于使用HMTL代码<input type="checklist">
submit标签 用于生成一个HMTL中的文本框元素,相当于使用HMTL代码<input type="submit">
reset标签 用于生成一个HMTL中的文本框元素,相当于使用HMTL代码<input type="reset">
表单标签常用的属性及说明
名称 说明
name 指定表单元素的name属性
title 指定表单元素的title属性
cssStyle 指定表单元素的style属性
cssClass 指定表单元素的class属性
required 用于在lable上添加“*”号,它的值为布尔类型,如果主true,则添加为“*”如果为false,则不添加
disable 指定表单元素的tdisable属性
value 指定表单元素的value属性
labelposition 指定表单元素的lable的位置,默认值为“left”
requirepostion 指定表单元素的lable上添加“*”号的位置,默认值为“right”
(2)更必默认的主题样式
Struts2提供 的表单标签,将表单中的元素放置到了一个表格之中,而应用了一定的CSS样式设置,原因就是,在默认的情况下,Struts2提供了表单标签应用了内置的主题样式
主题样式的设置可以应用到Struts2中的表单标签中与UI标签上,默认情况下,Struts2提供了4种主题样式:
**Simple
simple主题的功能较弱,它只提供了简单的HTML输出
**Xhtml
xhmtl主题是在simple之上的扩展,它提供了简单的布局样式,可以将元素用于表格布局中,也提供了lable的支持。
**css_xhtml
css_xhtml主题在xhtml主题基础上进行的扩展,它在功能上强化了xhtml主题在CSS上的样式控制
**ajax
ajax主题是在css_xhmtl主题上扩展,它在功能上主要强化了css_xhtml主题在Ajax方面的应用
默认情况下Struts2应用的是xhtml主题
四、拦截器
(1)、了解拦截器
拦截器可以动态增强Action对象的功能,在Struts2与ServletAPI进行解藕,Action对请求的处理不依赖于Servlet API,表单重复提交、对象类型转换、文件上传,还ModelDriven操作,都离不开拦截器。
拦截器动态地作用于Action与Result之间,它可以动态地Action及Result进行增强(在Action与Result加入新功能)
1、浏览器(http请求)--->StrutsPrepareAndExecuteFilter
2、StrutsPrepareAndExecuteFilter(Create)---->ActionProxy
3、ActionProxy(调用)-------->Interceptor
4、Interceptor--->前处理
5、Interceptor--->execute()
6、Interceptor---->返回result
7、Interceptor---->后处理
8、Intercepto(返回result)---->ActionProxy
9、ActionProxy(返回页面)----->浏览器
(2)、拦截器API
在Struts2API中,存在一个名为“com.opensymphony.xwork2.interceptor”的包,此包的对象是Struts2内置的一些拦截器对象,它们都具有不同的功能,Interceptor接口是Struts2框架中定义的拦截器对象
public interface Interceptor extends Serializable{
void destory();
void init();
String intercept(ActionInvocation invocation) throws Exception;
}
**destroy()方法指示拦截器生命周期结束,它在拦截器被销毁前被调用,用于释放拦截器在初始化进所占用的一些资源。
**init()方法用于对拦截器进行一引初始化操作,它在拦截器被实例化后,intercept()方法执行前被调用。
**intercept()方法是拦截器中的主要方法,用于执行Action对象中请求处理方法以及在Action的前前后后进行一些操作,动态增强Action功能。
只有调用intercept()方法中的invocation参数的invoke()方法,才可以执行Action对象中的请求处理方法
AbstractInterceptor对象是一个抽象类,它对Interceptory接口进行了实现,只用重写intercept()方法就行了
(3)、使用拦截器
1、搭建环境
2、创建TestAction
public class TestAction extends ActionSupport {
@Override
public String execute() throws Exception {
// 线程睡眠1秒
Thread.sleep(1000);
return SUCCESS;
}
}
(3)、配置struts.xml文件