代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts2 标签介绍</title>
</head>
<body>
<s:set name="tag" value="#{
'框架':{'struts','hibernate','spring'},
'模板':{'bootstrap','angular','velocity'},
'设计模式':{'创建型设计模式','结构型设计模式','行为型设计模式'}
}"/>
<h2>UI标签</h2>
<p>1.表单标签</p>
<s:form labelposition="top" action="formTag">
<s:checkboxlist name="ckl" list="{'struts2','hibernate','spring'}" label="复选框"></s:checkboxlist>
<s:radio name="rd" list="{'struts2','hibernate','spring'}" label="单选框"></s:radio>
<s:select name="sl" list="{'struts2','hibernate','spring'}" label="下拉框"></s:select>
<s:textfield name="tf" label="文本框"></s:textfield>
<s:password name="pw" label="密码框"></s:password>
<s:file name="file" label="文件"></s:file>
<s:updownselect name="us" list="{'struts2','hibernate','spring'}" label="可上下移动的下拉框" selectAllLabel="全选" moveDownLabel="下移" moveUpLabel="上移"></s:updownselect>
<s:doubleselect name="first" label="级联下拉框" list="#tag.keySet()" doubleList="#tag[top]" doubleName="second"></s:doubleselect>
<s:optiontransferselect name="otf" label="可上下左右移动的下拉列表框" leftTitle="框架" rightTitle="模板" list="{'struts2','hibernate','spring'}" doubleList="{'bootstrap','angular','velocity'}" doubleName="tem"></s:optiontransferselect>
<s:token/>
<s:submit value="提交"></s:submit>
</s:form>
<hr/>
注意:使用s:doubleselect时必须放在form标签中使用且必须为该form指定action属性
提交表单按f5刷新后会重复提交表单 token是用来防止f5重复提交表单问题
表单标签主要就介绍这么多 当然还有一些其他的
<hr/>
<p>2.非表单标签</p>
s:actionerror:如果action实例的getActionError方法不为null 则该标签负责输出该方法的系列错误<br/>
s:actionMessage:如果action实例的getActionMessage方法不为null 则该标签负责输出该方法的系列消息<br/>
s:component:生成自定义组件<br/>
s:fielderror:如果action实例中存在表单域的类型转换错误、校验u哦呜,该标签负责输出这些错误提示<br/>
<hr/>
<h2>非UI标签</h2>
<p>1.控制标签</p>
<s:set name="grade" value="70"/>
<ul>
<li>s:if/elseIf/else标签:类似大多数语言的ifelse语句</li>
<s:if test="#grade>90">
优秀(grade=${grade})
</s:if>
<s:elseif test="#grade>80">
及格(grade=${grade})
</s:elseif>
<s:else>
不及格(grade=${grade})
</s:else>
<li>s:iterator标签:用于对集合迭代输出,这里的集合包括set,list,map,数组</li>
<s:iterator value="{'struts2','hibernate','spring'}" id="kj" status="st">
<p><s:property value="#st.count"/>.<s:property value="kj"/></p>
</s:iterator>
<li>s:append标签:用于将多个集合对象拼接起来组成一个新的集合</li>
<s:append var="newList">
<s:param value="{'struts2','hibernate'}"></s:param>
<s:param value="{'spring','mybatis'}"></s:param>
</s:append>
<s:iterator value="#newList" id="kj" status="st">
<p><s:property value="#st.count"/>.<s:property value="kj"/></p>
</s:iterator>
<li>s:generator标签:将指定字符串按给定分隔符分成几个子串</li>
<s:generator separator="," val="'struts2,hibernate,spring'">
<s:iterator status="st">
<s:property/>
</s:iterator>
</s:generator>
<li>s:merge标签:同append一样将多个集合对象拼接起来组成一个新的集合,只是产生的顺序有所不同 具体不同看个例子就明白了<br/>两个集合分别是{'struts2','hibernate'},{'spring','mybatis'},append方法如上,merge如下</li>
<s:merge var="newList">
<s:param value="{'struts2','hibernate'}"></s:param>
<s:param value="{'spring','mybatis'}"></s:param>
</s:merge>
<s:iterator value="#newList" id="kj" status="st">
<p><s:property value="#st.count"/>.<s:property value="kj"/></p>
</s:iterator>
<li>s:subset标签:用于取得集合的子集,start下标从0开始</li>
<s:subset source="{'struts2','hibernate','spring','mybatis','freemarker'}" start="1" count="3">
<s:iterator status="st">
<s:property/>
</s:iterator>
</s:subset>
<li>s:sort标签</li>
<s:bean var="mycomp" name="org.lwk.util.mycomp"></s:bean>
<s:sort source="{'struts2','hibernate','spring','mybatis','freemarker'}" comparator="#mycomp" var="comp"></s:sort>
<s:iterator status="st" value="#attr.comp">
<s:property/>
</s:iterator>
</ul>
<hr/>
注意:有些标签生成的集合位于valuestack,因此可以通过s:property取得。标签结束后移出valuestack,如generator和subset等
attr是struts2添加到值栈的上下文取的一个Map(org.apache.struts2.util.AttributeMap)
这个attr包含4个作用域: Page scope,Request scope,Session scope,Application scope
sort中的var属性将排序后的新集合放入到pagecontext中因此可以通过attr取到值
<hr/>
<p>2.数据标签</p>
<hr/>
<h2>ajax标签</h2>
</body>
</html>
访问http://localhost:8888/ONGL/后: