第六章 通用标签
数据标签有:a , i18n ,text , action, include, url, bean, param , property, date, push, debug, set
控制标签有:if ,apppend , merge,elseif, generator, sort, else, iterator, subset
6.1 property标签
用来输出一个动作属性的值,属性有:
default: string类型,value属性没有时给出的默认值。
escape:boolean, 默认为true, 是否要对HTML特殊字符进行转义(&:& ": " <:< >:&rt;)
value:将要显示的值
6.2 a 标签
呈现一个html超链接,如:
<s:a href="www..." />
6.3 action标签
用来执行一个动作和该动作的结果,还会把该动作压入value stack栈的context map子栈,属性有
executeResult: 是否执行/呈现该动作的结果,默认为false
flush:是否在动作结束后对写缓冲区进行冲洗,默认为true
ignoreContextParams:是否在触发该动作时把请求参数也包括进来
name(必须的):触发的动作的名字,不需要要.action后缀
var: 压入context map栈的动作对象的变量
namespace:将要触发动作的命名空间
如: <s: action name="myAction" namespace="123" executeResult="false" />
6.4 param 标签
用来传递参数,属性有
name:参数的名称
value:参数的值,不管有没有用%{},该值都将计算,如果要赋值为string,则用单引号括起来
两种方法:<s: param name="var" value="1" /> , <s: param name="var" value=" '123' " />
<s: param name="var">1</s:param>此种还可用来传递一个EL表达式,如<s:param name="host">${header.host}</s:param>
6.5 bean标签
用来创建一个javaBean,并将其压入context map栈中,两个属性
name:要创建的bean的完整类名
var:相当于id,压入context map的时,需要再引用时的名称
如<s: bean name="appo3a.customer" var="customer">
<s: param name="name" value="ttt" />
</s:bean>
<s: property value="#customer.id" />
意思是显示ttt的id
6.6 date标签
日期标签,以何种方式显示日期,属性有:
format :以何种格式
name:将被排版的日期值
nice:是否进行高级排版
var:压入value stack栈里的变量名称
如:<s: bean name="java.util.Date" var="today" />
<s: date name="#today" format="M/dd/yyyy" var="date"/>
today:<s: property value="#date" >
将显示:today: 8/24/2011
6.7 include标签
用来将一个servlet/jsp页面输出包括到当前页面上来,只有一个value属性,为将被包括的servlet/jsp的名字
6.8 set 标签
用来在以下Map对象里创建一个值/键对
value stack栈里context stack子栈
Map 类型的session对象(当前会话)
Map request(当前请求)
Map application(当前应用程序)
Map page(当前页面)
三个属性:name:将被创建属性的健
value:该键引用的对象
scope:目标对象的作用范围,可为application, session,request,page,default
如,session里有一customer对象,里面有属性name,telephone,要想显示其name,telephone,可用:
<s: property value="#session.customer.name" />
<s: property value="#session.customer.telephone" />
运用set标签,可改为
<s:set name="customer" value="#session.customer" />
<s: property value="#customer.name" />
<s: property value="#customer.telephone" />
6.9 push标签
与set标签相似,只是它将对象压入value stack栈,而不是context map栈,此外,操作完成后,会将对象弹出,因此在此过程中的操作需要在push标签里完成
属性:value:将被压入value stack 栈的值
如:<s: push value="#session.customer">
<s: property value="name" />
<s: property value="telephone" />
</s: push>
6.10 URL 标签
用来动态创建一个URL,主要属性有:
action:所指向的动作
escapeAmp:是否对&字符进行转义,默认为true
includeContext:是否把当前的上下文包含进来
method:该动作的方法
namespace:命名空间
6.11 if else elseif标签
类似于JAVA里面的if,else,elseif关键字,必须有test 属性,即为测试条件,如
<s: if test="name==null" />
6.12 inerator 标签
用来遍历一个数组,一个collection或者一个Map 并把这个可遍历对象里的每一个元素依次压入和弹出value stack栈,属性有:
value:将被遍历的可遍历对象
status: org.apache.structs2.views.jsp.IteratorStatus,其值见如下表格
var:用来引用这个可遍历对象中的当前元素的变量:
名字 | 类型 | 说明 |
---|---|---|
index | integer | 各次遍历的下标值(从0开始) |
count | integer | 当前遍历的下标值或“index+1” |
first | boolean | 如果当前元素是可遍历对象的第一个元素,则为true |
last | boolean | 如果当前元素是可遍历对象的最后一个元素,则为true |
even | boolean | 如果count属性的值为一个偶数,则为true |
odd | boolean | 如果count属性的值为一个奇数,则为true |
modulus | int | 该属性需要一个输入参数,它的返回值是count属性值除以输入参数的余数 |
如:<s:iterator value="{1,2,3,4}">
<li><s:property /></li>
</s:iterator>
再如:<s:set name="car" value="{ '1','2','3' } " />
<s: iterator value="#car " status="status">
<s:property /><s:if test=="!#status.last">,</s:if>
</s:iterator>
6.13 append标签
即将两个列表里的内容连在一起,一个接着一个,,追加的意思,有一个属性var,用来引用新合并的可遍历对象的变量
如:<s:set var="list1" value=" {'1', '2' , '3' } "/>
<s:set var="list2" value="{'one','two' }" />
<s: append var="list">
<s:param value="#list1" />
<s:param value="#list2" />
</s:append>
<s:iterator value="#list">
<s:property />,
</s:iterator>
输出结果为:1,2,3,one,two,
6.14 merge标签
同append,所不同的是,输出的时候,交替输出,如上例,若用merge 标签,则会输出1,one,2,two,3, 也有一个var 属性。
6.15 generator标签
用来生成一个可遍历对象,压入value stack栈,所要做的操作必须在开始标签和结束标签之间完成,属性有:
名字 | 类型 | 说明 |
---|---|---|
converter | Converter | 转换器 |
count | Integer | 可遍历对象能容纳的元素个数 |
seperator(必须) | String | 各元素之间的分隔符 |
val(必须) | String | 可遍历对象中的各个元素的来源 |
var | String | 用来引用可遍历对象的变量 |
如:<s:generator converter="myConverter" val="{'one','two','three'}" seperator=",">
<ul>
<s:iterator>
<li> <s:property /> </li>
</s:iterator>
</ul>
</s:generator>
其中,myConverter是一个转换器,在相应的action里面定义,用来将字母换成大写。
6.16 sort标签
用来排序,其属性有:
名字 | 类型 | 说明 |
---|---|---|
comparator(必须) | jaa.util.Comparator | 排序中使用的比较器 |
source | String | 将要进行排序的可遍历对象来源 |
var | String | 用来引用因排序而新生成的可遍历对象的变量 |
如:<s: sort comparator="myComparator" source="{'one','two','three' }" >
<s:iterator >
<s:property />
</s:iterator>
</s:sort>
6.17 subset标签
用来生成可遍历对象的子集,属性有:
名字 | 类型 | 说明 |
---|---|---|
decider | Decider | 决定什么样的元素能够入子集 |
count | Integer | 决定子集里元素个数 |
source | String | 可遍历对象的来源 |
start | Integer | 从这个开始下标可以新建子集 |
var | String | 引用新建子集的可遍历对象的变量 |