基本概述:在JavaWeb中,Struts2标签库是一个比较完善,而且功能强大的标签库,它将所有标签都统一到一个标签库中,从而简化了标签的使用,它还提供主题和模板的支持,极大地简化了视图页面代码的编写,同时它还提供对ajax的支持,大大的丰富了视图的表现效果。与JSTL(JSP Standard Library,JSP 标准标签库)相比,Struts2标签库更加易用和强大。
PS:使用标签,需要引入Struts2核心jar包,在jsp头部,加入<%@ taglib uri="/struts-tags" prefix="s" %>即可
Struts2标签库的分类:
数据标签:
1、property
<!-- value:可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值 -->
<s:property value="cla2.num1"/>
2、set
注:set中的var没有放到值栈中
<s:set var="test2" value="cla2"></s:set>
<!-- 取不到值,因为标签代表的含义是,从值栈中去找test2的num1属性值 -->
没加#:<s:property value="test2.num1"/>
<!-- 能取到值,因为取的是非根(不是valuestack下)对象的num1属性值 -->
加#:<s:property value="#test2.num1"/>
页面效果:
3、push
push表示弹栈,标签体中即可拿到弹栈内容,结束标签回归原样
push前:<s:property/>
<s:push value="result">push后:<s:property/>
</s:push>
push完成后:<s:property/>
页面效果:
4、action
作用:是为了向后台发请求拿数据,加载初始化数据所用
<s:action name="tagAction" namespace="/sy" var="test3"></s:action>
test3:<s:property value="test3" />
test3.result:<s:property value="#test3.result" />
页面效果:
5、url
作用:用于存放一个路径
属性:
action:动作名称
namespace:名称空间
var:取值是一个普通字符串。他会把action和namespace组成一个url作为value,把var的取值作为一个key,存入contextMap中
<s:url namespace="/sy" action="tagAction" var="test4"></s:url>
<s:a href="%{#test4}">GO</s:a>
6、param
属于子标签,通常是配合action、url去使用的
<s:url namespace="/sy" action="tagAction" var="test5"><s:param name="test6">result</s:param><s:param name="test7" value="result"></s:param>
</s:url>
test5:<s:property value="test5" />
页面效果:
7、date
它是用于格式化输出日期
name属性:取值是一个ognl表达式,表示要格式化的日期对象
format属性:指定格式
var属性:取值是一个普通的字符串。
把格式化好的日期字符串作为value,把var的取值作为key。存入contextMap中
<%request.setAttribute("time", new Date());
%>
<s:date name="#request.time" format="yyyy-MM-dd"/>
8、debug
debug标签用于调试Struts2,使用它会在页面中生成一个debug标签,点击后会显示服务器各种对象信息,包括值栈、ContextMap等
<s:debug></s:debug>
控制标签:
1、iterator
s:iterator是struts2的一个迭代标签,它的value属性取值是一个OGNL表达式
var属性:它的取值就是一个普通的字符串.
用了var:把每次遍历的对象作为value,把var的值作为key,存入ContextMap中
没用var:把每次遍历的对象压入栈顶,再下次遍历之前弹栈(从栈顶移走)
<%request.setAttribute("names", new String[]{"zs","ls","ww"});
%>
<ul><s:iterator value="#request.names" var="i"><li><s:property value="#i" /></li></s:iterator>
</ul>
2、if/elseif/else
<%request.setAttribute("score", new Integer(30));%><s:if test="#request.score>80">A</s:if><s:elseif test="#request.score>60">B</s:elseif><s:else>C</s:else>
表单标签:
<s:form name="tagAction" namespace="/sy"><s:textfield label="姓名" name="uname"></s:textfield><!-- 写法一 --><s:radio list="{'男','女'}" value="'男'" label="性别" name="sex"></s:radio><!-- 写法二 --><s:radio list="#{1:'男',2:'女'}" value="2" label="性别" name="sex2"></s:radio><s:select list="#{1:'T211',2:'T204',3:'T237' }" label="班级" name="clazz"></s:select><!-- 单选复选框:往后台传的是boolean类型 --><s:checkbox label="婚否" name="married"></s:checkbox><!-- 多选复选框 --><s:checkboxlist list="#{1:'吃',2:'喝',3:'玩' }" label="爱好" name="hobby"></s:checkboxlist><s:textarea label="备注" name="remark"></s:textarea></s:form>
页面效果: