action标签是用来在JSP页面中调用Action某个Action类的,该标签有如下的几个属性;
Id
该属性用来指定Action的引用id
name
该属性是用来指定Action类的映射地址
namespace
该属性用来指定Action类所在namespace
executeResult
该属性用来指定是否将Action类的处理结果也跳转的那个视图内容包含到本页面中,默认值为false,不包含
ignoreContextParams
该属性用来指定是够将请求的参数传入到Action中,默认为false,即是传入
<h1>调用第一个action</h1> <!-- 调用登录的Action类,name指定<action>标签的name属性值,executeResult为true指示包含Action响应的内容 namespace指定Action类所在包指定的namespace --> <s:actionname="login"executeResult="true"namespace="/"></s:action> <hr> <h1>调用第二个action</h1> <!-- 调用第二个Action,表示注册页面,ignoreContextParams为true表示不传入参数,那么其中的password和username就不能接收参数了,因此输出为NULL --> <s:actionname="regist"executeResult="true"namespace="/"ignoreContextParams="true"></s:action>
bean标签用来创建一个JavaBean实例,和action标签差不多,就是在jsp页面中调用JavaBean对象,创建一个对象,不过这个对象是存在Stack Context中的,不是值栈中的。
id
用来表示创建的JavaBean类的实例,这个是用来在Stack Context中查看状态的,使用标签
name
用来指定JavaBean,指定JavaBean类所在的路径
var
这个是id一样的功能,其实可以代替id
<s:bean name="com.user.User" id="myBean" > <!-- 使用param标签为其赋值 --> <s:param name="username" value="'陈加兵'"></s:param> <s:param name="age" value="22"></s:param> 姓名: <s:property value="username"/><br> 年龄:<s:property value="age"/> </s:bean>
date标签用于格式化一个日期,除了格式化输出当前的日期,也可以计算指定的日期和当前日期时刻之间的时差
format
可选属性,用于指定格式化的格式,如yyyy/MM/dd-HH:mm:ss
name
必填的值,该属性指定格式化日期的值,比如Date对象
nice
可选属性,如果为true那么将会输出指定日期和当前日期的时差,默认为false
timezone
可选属性,指定格式化所用的时区
var
可选属性,如果指定了该属性,该时间对象将放入值栈中,可以使用id代替,但是推荐使用var
<!-- 创建一个日期对象now,表示当前的时间 --> <s:set var="now" value="new java.util.Date()"></s:set> <!-- 格式化当前的日期--> <s:date name="#now" format="dd/MM/yyyy HH:mm:ss"/><br>
将指定的jsp文件或者Servlet文件包含在当前的jsp页面,这个相当于
value
指定被包含的jsp或者Servlet文件路径
<s:include value="success.jsp"></s:include>
注意value的值是使用的OGNL表达式,一定要注意,如果指定字符串要加单引号或者双引号
name
指定要赋值的变量名
value
指定变量的值
<s:bean name="com.user.User" id="myBean" > <!-- 使用param标签为其赋值 --> <s:param name="username" value="'陈加兵'"></s:param> <s:param name="age" value="22"></s:param> </s:bean>
<s:bean name="com.user.User" id="myBean"> <s:param name="username" value="'陈加兵'"></s:param> <s:param name="age" value="22"></s:param> </s:bean> <%-- 只有在push标签内是,被放到值栈中的对象才存在,一旦出了push标签那么就不存在了 --%> <s:push value="#myBean"> <s:property value="username"/> <s:property value="age"/> <!-- 这个可以看出值栈中有值 --> <s:debug></s:debug> </s:push> <!-- 这个没有myBean对象 --> <s:debug></s:debug>
set标签是用来将某一个值放入指定的范围,当然也是相当于创建一个新的变量
id
该属性用来指定该元素的引用ID(废弃)
var
该属性用来指定创建的新变量的名称
value
用来指定变量的值,这个是使用的OGNL表达式
scope
该属性用来指定新变量的放置范围,可选值有page,request,session,application和action,如果没有指定该属性,则默认放在Stack Context中
<s:set var="x" value="'陈加兵'"></s:set> <s:property value="#x"/>
<s:set var="x" value="'陈加兵'" scope="session"></s:set> <s:property value="#session.x"/>
<s:set var="x" value="user.name"></s:set> <s:property value="#x"/>
url标签用于在页面生成一个url地址,该标签的属性如下:
id
指定该元素的引用id,如果指定了该属性,那么在Stack Context中就会有这个id,那么就可以使用#来获取它的值
value
该属性用来指定生成URL地址,如果不指定该属性,那么action属性指定的Action作为URL地址
action
该属性用来指定生成URL地址值的action,如果不指定该属性,那么使用value属性值作为URL地址值
method
该属性用来指定使用action的方法
encode
该属性用来指定是否需要encode请求参数,默认值为true
includeParams
该属性用来指定是否包含请求参数,可选值为:none,get,和all默认的为none
includeContext
该属性指定是否需要当前上下文包含在url地址中
anchor
该属性指定URL的锚点
Scheme
该属性用来指定URL使用的协议(HTTP或者HTTPS)
namespace
该属性用来指定命名空间,使用action的时候指定
<s:url value="success.jsp" includeParams="get" id="myUrl"> <s:param name="username" value="'陈加兵'"></s:param> </s:url> <hr> <s:url action="login"></s:url> <hr> <s:url action="login" namespace="/user" includeParams="get"> <s:param name="username" value="'陈加兵'"></s:param> </s:url> <hr> <!-- 获取值 --> <s:property value="#myUrl"/>
property标签是用来在页面中输出指定值,该标签有如下属性:
id
指定该元素的标识(废弃)
value
指定需要输出的特定的值,注意这里使用的OGNL表达式,如果没有指定value属性,那么将会输出值栈中的栈顶的值
escape
指定是否转义输出内容中HTML,其默认值为true
default
指定一个默认的输出值,如果value中的值为空,那么就会默认输出这个值
<!-- 转义标签h1,输出内容 --> <s:property value="'<h1>陈加兵</h1>'" escape="false"/> <!-- 输出Stack Context中的内容,并且指定了默认值 --> <s:property value="#username" default="输出一个默认值"/> <!-- 输出栈顶的值 --> <s:property/>
set
, property
, debug
, i18n
这些标签,其他的了解写即可 <s:set var="age" value="22"></s:set> <s:if test="#age>10"> <s:property value="#age+'大于10'" /> </s:if> <s:elseif test="#age>20"> <s:property value="#age+'大于20'" /> </s:elseif> <s:else> <s:property value="#age+'在10与20之间'" /> </s:else>
<%-- 新建一个集合list --%> <s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set> <%-- 指定begin,end获取前3个元素--%> <s:iterator value="#list" var="item" status="iter"> <s:if test="#iter.isOdd()&iter.getIndex()>0"> <s:property value="#item+'---'+#iter.getIndex()"/> <br> </s:if> </s:iterator>
iterator标签主要用于对集合进行迭代,这里的集合包含list,Set和数组,也可以对Map集合进行迭代输出。
value
可选属性,该属性指定迭代的集合,如果没有指定value属性,那么就会迭代ValuStack栈顶的集合。
var
可选属性,该属性指定的是迭代的集合中的每一个元素,放在Stack Context中·
status
可选属性,该属性指定迭代对象的IteratorStatus实例存放在Stack Context中,通过这个属性可以判断当前迭代元素的属性。例如是否为最后一个,以及当前元素的索引
begin
可选属性,指定从迭代对象第几个元素开始迭代
end
可选属性,指定迭代到对象的第几个元素结束
step
可选属性,指定步长
<%-- 新建一个集合list --%> <s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set> <%--指定了value属性,但是其他属性都没有,那么直接可以从栈顶取数据 --%> <s:iterator value="#"> <s:property/> </s:iterator>
指定var属性来获取迭代对象的值:
<%-- 新建一个集合list --%> <s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set> <%-- 指定var表示当前迭代对象的每一个元素--%> <s:iterator value="#list" var="item"> <%-- 因为var元素是放在Stack Context中,因此可以使用#取值 --%> <s:property value="#item" /> </s:iterator>
指定begin,end来获取指定范围的值。
<%-- 新建一个集合list --%> <s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set> <%-- 指定begin,end获取前3个元素--%> <s:iterator value="#list" var="item" begin="0" end="2"> <%-- 因为var元素是放在Stack Context中,因此可以使用#取值 --%> <s:property value="#item" /> </s:iterator>
<%-- 新建一个集合list --%> <s:set var="list" value="{'陈加兵','郑元梅',22,33}"></s:set> <%-- 指定begin,end获取前3个元素--%> <s:iterator value="#list" var="item" status="iter"> <s:if test="#iter.isOdd()&iter.getIndex()>0"> <s:property value="#item+'---'+#iter.getIndex()"/> <br> </s:if> </s:iterator>
<s:set var="map" value="#{'age':22,'username':'陈加兵' }"></s:set> <s:iterator value="#map" var="item"> 获取集合中的key:<s:property value="#item.key"/> 获取集合中的值:<s:property value="#item.value"/> </s:iterator>
append标签用于将多个集合拼接起来形成一个新的集合。
var
拼接之后形成的新的集合,放在Stack Context中
id
这个和var是一样的,两个可以互换使用的,不过推荐使用var
<%-- 新建一个集合list --%> <s:set var="list1" value="{'陈加兵','郑元梅',22,33}"></s:set> <s:set var="list2" value="{44,55,6,99}"></s:set> <s:append var="list3"> <%-- 使用param标签指定要拼接的集合 --%> <s:param value="#list1"></s:param> <s:param value="#list2"></s:param> </s:append> <s:iterator value="#list3" var="item"> <s:property value="#item"/> </s:iterator>
使用这个标签可以将字符串按照指定的分隔符分割成多个子串,临时生成的子串可以使用
val
必选属性,该属性指定被解析的字符串
var
可选属性,如果指定了该属性,那么生成的Iterator对象将会以这个名称放在Stack Context中,就可以访问这个集合了。
count
可选属性,该属性指定生成集合中元素的个数
separator
必选属性,这个属性指定分隔符
converter
可选属性,该属性指定一个转换器,该转换器负责将集合中的每一个字符串转换成对象,通过该转换器可以将一个字符串解析成对象集合。该属性值必须是org.apache.struts2.util.IteratorGenerator.Convertere
<%--分隔符为',',并且选取其中的前两个元素 --%> <s:generator separator="," val="'陈加兵,郑元梅,chenjiabing'" var="x" count="2"></s:generator> <s:iterator value="#x" var="item"> <s:property value="#item" /> </s:iterator>
<s:set var="list1" value="{'陈加兵','郑元梅'}"></s:set> <s:set var="list2" value="{1,2}"></s:set> <s:merge var="list3"> <s:param value="#list1"></s:param> <s:param value="#list2"></s:param> </s:merge> <s:iterator var="item" value="#list3"> <s:property value="#item"/> </s:iterator>
subset标签用于取得集合的子集,形成新的集合。
count
可选属性,指定选取集合的子集的个数,如果不指定该属性,那么默认的就是截取全部的元素
source
可选属性,该属性指定源集合,如果没有指定,那么默认是从栈顶取集合
start
可选属性,该属性指定子集从源集合的第几个元素开始截取,默认从第一个开始(即start=0)
decider
可选属性,该属性有开发真决定是否选中该元素
var
可选属性,如果指定了该属性,那么生成Iterator对象设置成为Page范围内的属性,可以使用#attr.name获取其值,也可以替换成id,但是推荐使用var
<!-- 创建一个集合 --> <s:set var="list1" value="{'陈加兵','郑元梅',1,2,3}"></s:set> <!-- 指定变量为x,存储在page中,源集合为list1,截取其中的两个元素,从第二个元素开始截取 --> <s:subset var="x" source="#list1" count="2" start="1"></s:subset> <!-- 由于x存储在Page中,因此使用#attr.x来获取 --> <s:iterator value="#attr.x" var="item"> <s:property value="#item" /> </s:iterator>
主要用于对集合进行排序
comparator
必填属性,该属性指定进行排序的实例,必须实现java.util.Comparator接口
source
可选属性,这是一个源集合,如果没有指定,那么就拿栈顶的集合进行排序
var
可选属性,如果指定了属性,那么生成的Iterator对象设置成Page范围的属性,该属性也可替换成id
<s:set var="list" value="{'陈加兵','123459999+','4442555'}"></s:set> <!-- 创建一个实例 --> <s:bean name="com.compare.Compare" id="compare"></s:bean> <!-- 排序 --> <s:sort comparator="#compare" source="#list" var="x"></s:sort> <!-- 迭代输出 --> <s:iterator var="item" value="#attr.x"> <s:property value="#item" /> </s:iterator>