1、通用标签
1.1 property
1.2 set
I 默认为action scope,会将值放入request 和 ActionContext 中
II page、request、session、application
1.3 bean
1.4 include (对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)
1.5 param
1.6 debug
2、控制标签
2.1 if……else if…… else
2.2 iterator
I collections map enumeration iterator array
2.3 subset
3、UI标签
3.1 theme
I simple xhtml(默认) css xhtml ajax
4、AJAX标签
4.1 补充
5、$、#、% 的区别
5.1 $ 用于 i18n 和struts 配置文件
5.2 # 取得ActionContext 的值
5.3 % 将原来的文本属性解析为 ognl,对于本来就是 ognl 的属性不起作用
I 参考<s:property 和 <s:include
范例一:通用标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts-Tags 学习</title>
</head>
<body>
<ol>
<li>property:<s:property value="username"/></li>
<li>property取值为字符串:<s:property value="'username'"/></li>
<li>property设定默认值:<s:property value="admin" default="管理员"/></li>
<!-- false 表示不将HTML标签解析成字符串,而是直接作为HTML标签所代表的内容进行输出,这里<hr/>是一条横线,escape默认为true -->
<li>设定HTML:<s:property value="<hr/>" escape="false"/></li>
<!-- ########################################################################################## -->
<!-- set标签用的并不多,比如将一个长名字set成一个短名字的时候可以使用 -->
<!-- 定义一个变量,值为username的值,下面的两个方法都可以取得这个值 -->
<li>set 设定adminName值(默认为request 和 ActionContext):<s:set var="adminName" value="username"/></li>
<li>set 从 request 取值:<s:property value="#request.adminName"/></li>
<li>set 从 ActionContext 取值:<s:property value="#adminName"/></li>
<!-- scope="page",当前页面有效 -->
<li>set 使用name属性(现在已经废弃这种属性了,直接使用var)的时候,设定范围:<s:set name="adminPassWord" value="password" scope="page"/></li>
<li>set 从相应范围取值:<%=pageContext.getAttribute("adminPassWord") %></li>
<li>set 使用var的时候,默认范围就是ActionContext:<s:set var="adminPassWord" value="password"/></li>
<li>set 从 ActionContext 取值:<s:property value="#adminPassWord"/></li>
<li>set 使用var的时候,指定session范围:<s:set var="adminPassWord" value="password" scope="session"/></li>
<li>set 从 session范围 取值:<s:property value="#session.adminPassWord"/></li>
<!-- ########################################################################################## -->
<li>bean 定义bean,并使用param 来定义新的属性值
<!-- 必须var 定义之后才能取值,如果不适用var就必须在bean标签之内取值才能取到 -->
<s:bean name="com.haizhu.Tags.Dog" var="myDog">
<!-- name="name"是将Dog类中的name赋值为Oudy,注意,一定要在双引号之内加上单引号,不然会将Oudy当做OGNL表达式的 -->
<s:param name="name" value="'Oudy'"></s:param>
</s:bean>
<!-- 当使用var之后,就可以使用"#xx"的方式取值,因为使用var之后就将这个bean放在ActionContext中了 -->
<s:property value="#myDog.name"/>
</li>
<!-- ########################################################################################## -->
<li>include 标签
<!-- 一般使用<%@ include %>和<jsp:inclue >这两种方式 -->
<s:include value="/_include1.html"></s:include>
</li>
<li>
<s:set var="incPage" value="/_include2.html"></s:set>
<!-- %{} 的作用就是将#incPage当做OGNL表达式而不是字符串 -->
<s:property value="%{#incPage}"></s:property>
</li>
</ol>
</body>
</html>
范例二:遍历标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts-Tags 学习</title>
</head>
<body>
<ol>
<li> if……else if……else 的使用
<!-- 一个属性可以传递多个值(在地址栏通过后缀的形式传递过来),取值的时候如果确定取第一个值,可以使用[0]来指定 -->
age=<s:property value="#parameters.age[0]"/>
<s:if test="#parameters.age[0] < 0"> Wrong age!</s:if>
<s:elseif test="#parameters.age[0] < 0"> Too young!</s:elseif>
<s:else>Yeah!</s:else>
</li>
<!-- 上面这个例子可以使用set来简化写法 -->
<li>
age=<s:property value="#parameters.age[0]"/>
<s:set name="age" value="#parameters.age[0]"/>
<s:if test="#age < 0"> Wrong age!</s:if>
<s:elseif test="#age < 0"> Too young!</s:elseif>
<s:else>Yeah!</s:else>
</li>
<li>
<s:if test="#parameters.aaa == null"> null </s:if>
</li>
<!-- ########################################################################################## -->
<li>遍历集合:<br/>
<s:iterator value="{1,2,3}">
<s:property/> |
</s:iterator>
</li>
<li>自定义变量:<br/>
<s:iterator value="{'aaa','bbb','ccc'}" var="iter">
<!-- #表示去取ActionContext中的值,这里为什么用呢?难道iter放入ActionContext中了? -->
<!-- 对的,看到 var 就表示放在了ActionContext中了!所以,可以用#访问。 -->
<s:property value="#iter.toUppperCase()"/>
</s:iterator>
</li>
<li>使用status<br/>
<s:iterator value="{'aaa','bbb','ccc','ddd'}">
<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>
</li>
<li>遍历map<br/>
<!-- 定义map的时候,前面有个#,跟list不一样的地方 -->
<s:iterator value="#{1:'aaa',2:'bbb',3:'ccc'}">
<s:property value="key"/> | <s:property value="value"/> <br/>
</s:iterator>
</li>
<li>
<s:iterator value="#{1:'aaa',2:'bbb',3:'ccc'}" var="myMap">
<s:property value="#myMap.key"/> | <s:property value="#myMap.value"/>
</s:iterator>
</li>
</ol>
</body>
</html>
项目范例:
<s:if test="population.currentAddress != null">
<td class="title"><label>现居地址</label></td>
<td colspan="4" class="content">
<span id="alertCon">${population.currentAddress}</span>
</s:if>
<s:else>
<td class="title"><label>无房原因</label></td>
<td colspan="4" class="content">
<span>${population.noHouseReason}</span>
</s:else>