码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2学习笔记(九):Strut2通用标签详解

时间:2015-08-29 12:46:16      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:struts   ognl   标签   

本节主要介绍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

Struts2学习笔记(九):Strut2通用标签详解

标签:struts   ognl   标签   

原文地址:http://blog.csdn.net/jiajia333666/article/details/48085517

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!