注:使用标签,需要引入Struts2核心jar包,并在jsp头部加入<%@ taglib uri="/struts-tags" prefix="s" %>
1. 通用标签:
a) property
- id:可选属性,指定该元素的标识。
- default:可选属性,如果要输出的属性值为null,则显示default属性的指定值。
- escape:可选属性,指定是否忽略HTML代码。
- value:可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值
property 取值为字符串(加了单引号的username为字符): <s:property value="'username'"/>
property 设定默认值: <s:property value="admin" default="管理员"/> //当值栈中没有 admin,则显示管理员
property 设定HTML: <s:property value="'<hr/>'" escape="false"/> //为true则原样显示<hr/>
b) set
i. 默认范围为action scope,会将值放入request和ActionContext中
ii. 其他范围:page、request、session、application
set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" />
set 从request取值: <s:property value="#request.adminName" />
set 从ActionContext取值: <s:property value="#adminName" />
set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/>
set 使用#取值: <s:property value="#adminPassword"/>
set 从相应范围取值: <s:property value="#session.adminPassword"/>
c) bean
bean 定义bean,并使用param来设定新的属性值:
<s:bean name="com.struts2.tags.Dog" >
<s:param name="name" value="'pp'"></s:param> //name为com.struts2.tags.Dog,为其赋值为pp
<s:property value="name"/> //从值栈中取值,结果为pp
</s:bean>
bean 查看debug情况:
<s:bean name="com.struts2.tags.Dog" var="myDog"> //myDog为com.struts2.tags.Dog的对象
<s:param name="name" value="'oudy'"></s:param>
</s:bean>
ActionContex拿出值:
<s:property value="#myDog.name"/>
d) include(对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)
include _include1.html 包含静态英文文件
<s:include value="/_include1.html"></s:include>
include _include2.html 包含静态中文文件 (引不进来中文文件)
<s:include value="/_include2.html"></s:include>
include _include1.html 包含静态英文文件加%用法(加%的都是ognl表达式)
<s:set var="incPage" value="%{'/_include1.html'}" />
//将从ActionContext取出incPage对应的值再作为ognl表达式,并取出该表达式的值
e) param
f) debug
<s:debug></s:debug>
2. 控制标签
a) if elseif else
例1: if elseif else:
age = <s:property value="#parameters.age[0]" /> <br />
<s:set var="age" value="#parameters.age[0]" /> //可以理解为用age替代parameters.age[0]
<s:if test="#age < 0">wrong age!</s:if>
<s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>
<s:else>yeah!</s:else><br />
例2:<s:if test="#parameters.aaa == null">null</s:if>
b) iterator
遍历集合:<br />
<s:iterator value="{1, 2, 3}" >
<s:property/> |
</s:iterator>
自定义变量:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
<s:property value="#x.toUpperCase()"/> |
</s:iterator>
使用status:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> |
遍历过的元素总数:<s:property value="#status.count"/> |
遍历过的元素索引:<s:property value="#status.index"/> |
当前是偶数?:<s:property value="#status.even"/> |
当前是奇数?:<s:property value="#status.odd"/> |
是第一个元素吗?:<s:property value="#status.first"/> |
是最后一个元素吗?:<s:property value="#status.last"/>
<br />
</s:iterator>
遍历Map集合
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
<s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>
c) subset(取子串)
3. UI标签
a) theme
i. simple xhtml(默认) css_xhtml ajax
4. $ # %的区别
a) $用于i18n和struts配置文件
b) #取得ActionContext的值
c) %将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用
i. 参考<s:property 和 <s:include>