本节主要介绍Strus2中的通用标签,主要有<s:url>, <s:set>, <s:push>, <s:if>, <s:elseif>, <s:else>, <s:iterator>, <s:sort>, <s:date>, <s:a>等几个标签的具体用法,仍然采用代码加注释的形式进行说明,希望能对大家有帮助。
刚入门的朋友阅读本文前,请阅读:
Struts2学习笔记(六):值栈(value Stack)浅析
Struts2学习笔记(七):OGNL之<s:property>标签访问值栈(value
Stack)对象属性
<%@page import="java.util.Date"%> <%@page import="com.jiajia.utils.StringComparator"%> <%@page import="java.util.HashMap"%> <%@page import="java.util.Map"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@page import="com.jiajia.model.User"%> <%@page import="com.jiajia.utils.UserComparator"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- 添加struts标签所需的标签库 --> <%@ taglib prefix="s" uri="/struts-tags" %> <!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>Insert title here</title> </head> <body> <!-- 为了在网页中看到valueStack,必须加上该条配置 --> <s:debug></s:debug> <h2>1.s:url 标签测试</h2> <h4>value设置url的具体内容,前面会自动加上contextPath,var相当于是该url的标识,可以在别处用来引用 </h4> <h4>s:param 子标签用来设置url请求的参数,name属性代表参数名称,value属性代表参数值。<br/> struts2会自动对value的值进行OGNL解析,若只是单纯想设置字符串,可以用单引号将字符串括起来</h4> <s:url value="/tag" var="url1"> <s:param name="name" value="user.userName"></s:param> <s:param name="gender" value="'male'"></s:param> </s:url> url1: ${url1} <br/><br/> <h4>action属性标识该url请求指向的是某个action,其中namespace和method的含义与action配置文件中相同。</h4> <s:url action="userAction" namespace="/" method="addUser" var="url2"></s:url> url2: ${url2} <br/><br/> <h4>includeParams属性指示是否包含请求参数,有三种取值,all标识包含所有请求参数,none标识不包含任何请求参数,<br/> get标识只包含get请求参数,不包含post请求参数。</h4> <s:url value="url3" includeParams="all" var="url3"></s:url> <s:url value="url4" includeParams="none" var="url4"></s:url> <s:url value="url5" includeParams="get" var="url5"></s:url> all-url3: ${url3 }<br/> none-url4: ${url4 }<br/> get-url5: ${url5 }<br/> <br/><br/> <h2>2.s:set 标签测试</h2> <h4>set标签的作用是向值栈的context map中添加键值对。name代表key,value就是value,仍然会进行OGNL解析。<br/> scope的取值有application,session,request, page分别代表四个域对象,若scope不填,则可以使用attr进行访问</h4> <s:set name="name2" value="user.userName" scope="session"></s:set> <s:set name="name3" value="user.userName" scope="request"></s:set> <s:set name="name4" value="user.userName"></s:set> session-name2:<s:property value="#session.name2"/><br/> request-name3:<s:property value="#request.name3"/><br/> attr-name4:<s:property value="#attr.name4"/> <br/><br/> <h2>3.s:push 标签测试</h2> <h4>push标签用于向值栈的对象栈的栈顶放进一个对象。push 标签在标签起始时把一个对象压入栈, 标签结束时将对象弹出栈<br/> 注意:push标签的value属性只能使用OGNL表达式进行赋值,用EL会报错,同时,push标签放到值栈中的对象只能在标签内部使用,一旦离开标签,对象就会被pop出来</h4> <% //创建一个新的User对象 User myUser = new User("jiajia", 26, "female"); request.setAttribute("myUser", myUser); %> <s:push value="#request.myUser"> myUser.userName:<s:property value="userName"/> </s:push> <br/><br/> <h2>4.s:if, s:elseif, s:else 标签测试</h2> <h4>这三个标签主要用于条件判断,test是判断条件。</h4> <s:property value="user.userName"/>-<s:property value="user.userAge"/>: <s:if test="user.userAge>18">成年人</s:if> <s:elseif test="user.userAge>15">青年</s:elseif> <s:else>少年</s:else> <br/><br/> <h2>5.s:iterator 标签测试</h2> <h4>iterator标签主要用于对数组、Collection、Map等进行遍历,iterator会把容器中的对象依次放入对象栈,并依次弹出<br/> value表示被遍历的对象,var表示当前遍历到的对象,status如果设置了,就表示一个IteratorStatus对象,其index属性表示<br/> 当前遍历的索引,count属性表示当前遍历的是第几个,begin表示从第几个(索引,从0开始)对象开始遍历,end表示到第几个结束,step<br/> 表示遍历的步长,需要注意的是,只有设置了begin属性,end和step才会起作用</h4> <% String[] array = new String[]{"B","A","E","C","D"}; List<User> lUsers = new ArrayList<User>(); lUsers.add(new User("CC",33,"male")); lUsers.add(new User("EE",55,"male")); lUsers.add(new User("BB",22,"female")); lUsers.add(new User("AA",11,"male")); lUsers.add(new User("DD",44,"female")); Map<Integer, User> mUsers = new HashMap<Integer, User>(); mUsers.put(5, new User("EEE",56,"male")); mUsers.put(2, new User("BBB",23,"female")); mUsers.put(1, new User("AAA",12,"male")); mUsers.put(4, new User("DDD",45,"female")); mUsers.put(3, new User("CCC",34,"male")); request.setAttribute("array", array); request.setAttribute("lUsers", lUsers); request.setAttribute("mUsers", mUsers); %> (1)遍历数组 <br/><br/> <s:iterator value="#request.array" var="str" status="status" begin="0" step="2" end="3"> index:${status.index}-count:${status.count}-EL:${str }-OGNL:<s:property value="#str"/><br/> </s:iterator> <br/><br/> (2)遍历List <br/><br/> <s:iterator value="#request.lUsers" var="u" status="status" begin="0" step="1" end="3"> index:${status.index}-count:${status.count}-EL:${u }-OGNL:<s:property value="userName"/><br/> </s:iterator> <br/><br/> (3)遍历Map <br/><br/> 注意:Map的遍历方式有别于数组和collection,value属性仍然是Map对象,var是一个HashMap的内部类Entry对象,<br/> 它有key和value两个属性,key就是键,value就是值。 <br/><br/> <s:iterator value="#request.mUsers" var="kk" > key:<s:property value="key"/>-value:<s:property value="value"/> -#kk:<s:property value="#kk"/>-#kk.key:<s:property value="#kk.key"/> -#kk.value:<s:property value="#kk.value"/>-${kk.key}-${kk.value }<br/> </s:iterator> <br/><br/> <h2>6.s:sort 标签测试</h2> <h4>sort标签可以用来对集合进行排序,comparator属性设置可以比较目标对象的比较器<br/> (实现Comparator接口的对象),必填,source是带排序集合,var是排序以后的结果</h4> <% UserComparator uc = new UserComparator(); request.setAttribute("userComparator", uc); StringComparator sc = new StringComparator(); request.setAttribute("stringComparator", sc); %> 对List进行排序: <br/><br/> 排序以后的结果可以有两种形式进行遍历,一种是将 iterator 标签作为 sort 标签的子标签,直接访问对象属性<br/> 另一种是在 sort 标签中设置 var 属性,记录排序结果,然后对 var 进行遍历。 <br/><br/> <s:sort comparator="#request.userComparator" source="#request.lUsers" var="lUsers2"></s:sort> <s:iterator value="#attr.lUsers2" var="u2"> <s:property value="#u2"/>-${userName}-${userAge }-<s:property value="userGender"/><br/> </s:iterator> <br/><br/> <s:sort comparator="#request.userComparator" source="#request.lUsers"> <s:iterator> <s:property value="userName"/>-${userName}-${userAge }-<s:property value="userGender"/><br/> </s:iterator> </s:sort> <br/><br/> 对数组进行排序: <br/><br/> <s:sort comparator="#request.stringComparator" source="#request.array" var="array2"></s:sort> <s:iterator value="#attr.array2" var="str2"> ${str2}<br/> </s:iterator> <br/><br/> <h2>7. s:date 标签测试</h2> <h4>date 标签主要用于方便的对日期进行格式化,name属性表示需要被格式化的日期,format属性表示格式,例如yyyy-MM-dd hh:mm:ss</h4> <% Date today = new Date(); request.setAttribute("time", today); %> 格式化前:${time } <br/><br/> 格式化后:<s:date name="#request.time" format="yyyy-MM-dd hh:mm:ss"/> <br/><br/> <h2>8. s:a 标签测试</h2> <h4>a 标签主要用来创建超链接,href设置链接的url,href中不能使用EL表达式,若需要使用OGNL,需要强制解析,<br/> 方式为 :%{variable}</h4> <s:a href="%{url1}">点击我</s:a> <br/><br/> <br/><br/> <br/><br/> <br/><br/> <br/><br/> </body> </html>完整的示例代码在这里:http://download.csdn.net/detail/jiajia333666/9060415
版权声明:本文为博主原创文章,未经博主允许不得转载。转载地址:http://blog.csdn.net/jiajia333666
原文地址:http://blog.csdn.net/jiajia333666/article/details/48085517