struts控制标签的使用例子

在Struts2中的非UI标签包括控制标签和数据标签,主要的作用是完成流程控制,以及操作Struts的ValueSack。

控制标签有下面几个:

1、if:用于控制选择输出的标签。

2、else if /else if:与if标签结合使用,用于控制选择输出的标签。

3、else:与if标签结合使用,用于控制选择输出的标签。

4、append:用于将多个机会拼接成一个新的集合。

5、generator:他是一个字符串解析器,用于将一个字符串解析成一个集合。

6、iterator:这是一个迭代器,用于将集合迭代输出。

7、merger:用于将多个机会拼接成一个新的集合。但与append的拼接有所不同。

8、sort:这个标签用于对集合进行排序。

9、subse:这个标签用于截取集合的部分元素,形成新的子集合。

Struts标签其实和html标签有点类似因为都是成对存在的

下面给大家示范下怎么使用这些标签的实例:

一、if /else if /else标签,其实是通过条件的判断进行选择输出我们想要的结果和java哪里是一样的。

<s:set name="age" value="29"/>
<s:if test="#age>60">
      老人
</s:if>
<s:elseif test="#age>35">
       中年人
</s:elseif>
<s:slse>
      少年
</s:slse>

二、iterator标签,对集合进行迭代输出集合里面的内容,这里的集合包涵有List、Set和数组,也可以对Map集合进行迭代

<%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags"  %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title></title>
</head>
<body>
<table border="1" width="20">
	<!-- 这里value的值是使用‘’表示字符串的如果在使用的使用的单字符如:1、2、3等a、b、c等分开的字符放到''笔者试验过
	包错java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String这个大家注意下吧。
	 -->
	<s:iterator value="{'aaa','bbb','ccc','ddd','eee','fff','ggg','hhh','iii'}" id="name" status="st">
	<tr>
			<td>
				<s:property value="name"/>
			</td>
	</tr>
	</s:iterator>
</table>
</body>
</html>
 

上面的status属性中指的是iterator对象,他可以使用这个迭代器中的一些方法

我给大家列出来吧:

int getCount():返回当前被迭代元素的总个数

int getIndex():返回当前迭代的所以,可以查看那个元素在集合排列中的位置

boolean isEven():返回当前被迭代的是不是偶数

boolean isFirst():返回当前被迭代的是不是第一个元素

boolean isLast():返回当前被迭代的是不是最后一个元素

boolean isOdd():返回当前被迭代的是不是奇数

三、 append标签,将多个集合对象进行拼接,组成一个新的集合。通过拼接从而允许通过一个迭代标签完成多个集合的迭代。

 <%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags"  %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title></title>
</head>
<body>
	<s:append var="newList">
		<!-- 下面的两个集合这样就算是拼接的过程 -->
		<s:param value="{'遮天---辰东','宙魔---西照','盘龙---番茄','吞噬星空---番茄','神墓---辰东'}"/>
		<s:param value="{'天龙八部','魔兽世界','DNF','魔域','hycollege'}"/>	
	</s:append>
	<table border="1" width="300">
		<!-- 使用上面说的迭代器进行集合数据的迭代显示 -->
		<s:iterator value="#newList" status="st" id="show">
			<tr>
				<td><s:property value="#st.count"/></td>
				<td><s:property value="show"/></td>
			</tr>
		</s:iterator>
	</table>
</body>
</html>

显示结果:

四、generator标签,可以将指定字符串按指定的分隔符分隔成多个字符串,临时生成的多个子串可以使用iterator标签迭代输出。

其实就是通过这标签生成一个新的集合,我个人的理解。

<%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags"  %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title></title>
</head>
<body>
	<table border="1" width="300">
	<!-- separator=","指定分隔符 -->
	<s:generator separator="," val="'遮天---辰东,宙魔---西照,盘龙---番茄,吞噬星空---番茄,神墓---辰东'">
	<!-- 这里没有指定是那个集合,所以直接迭代ValueStack顶端的集合 -->
	<s:iterator status="st">
		<tr><s:property/></tr>
	</s:iterator>
	</s:generator>
	</table>
</body>
</html>

显示效果图:

如果使用generator标签中使用了count和var属性,其中count表示可以包含的个数,如果是二那就是只能输出两个元素,var等同于我们要迭代的对象集合

<%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags"  %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title></title>
</head>
<body>
	
	<!-- separator=","指定分隔符 -->
	<s:generator separator="," val="'遮天---辰东,宙魔---西照,
		盘龙---番茄,吞噬星空---番茄,神墓---辰东'" var="show" count="3"/>
	<table border="1" width="300">
	<s:iterator value="#show">
		<tr><s:property/></tr>
	</s:iterator>
	
	</table>
</body>
</html>

显示效果:

五、merge标签,这个标签的使用和上面的append是差不多的,区别在于他们对两个集合的排列不一样。

append:

比如:有两个集合进行拼接,两个集合都有三个元素

(1)第一个集合中的第一个元素

(2)第一个集合中的第二个元素

(3)第一个集合中的第三个元素

(4)第二个集合中的第一个元素

(5)第二个集合中的第二个元素

(6)第二个集合中的第三个元素

merge:

(1)第一个集合中的第一个元素

(2)第二个集合中的第一个元素

(3)第一个集合中的第二个元素

(4)第二个集合中的第二个元素

(5)第一个集合中的第三个元素

(6)第二个集合中的第三个元素

六、subset标签,用于取得集合的子集,这个标签的底层通过org.apache.struts2.util.Subset IteratorFilter类提供实现。

<%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags"  %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title></title>
</head>
<body>
	<table border="1" width="300">
	<!-- 使用subset标签截取目标集合四个元素,从第二个开始截取 -->
	<s:subset source="{
		'遮天---辰东','宙魔---西照','盘龙---番茄','吞噬星空---番茄','神墓---辰东'
	}" start="1" count="4">
		<!-- 这里没有指定是那个集合,所以直接迭代ValueStack顶端的集合 -->
	<s:iterator status="st">
		<tr>
			<td><s:property/></td>
		</tr>		
	</s:iterator>
	</s:subset>
	</table>
</body>
</html>

效果图:

 

如果要按照自己的条件进行截取,那么在struts2中我们的程序员可以自己定义自己的截取标准,前提示要先实现一个Decider类,这个类要实现SubsetIteratorFilter.Decider接口,必须实现这个接口中的boolean decide(Object element)方法,如果方法返回真,则表明这个元素师符合我们的截取条件的我们就可以选取到。下面看例子吧。

Java类:

import org.apache.struts2.util.SubsetIteratorFilter.Decider;
public class MyDecider implements Decider {

	@Override
	public boolean decide(Object element) throws Exception {
		// TODO Auto-generated method stub
		String str=(String)element;
		return str.indexOf("---")>0;
	}

}
 
我在刚才测试这个例子的有发现一个问题还是给大家提出来吧:刚才我在导入Bean的时候把<s:bean var="mydecider" name="text.decider.Decider.MyDecider"/>和<%@ taglib prefix="s" uri="/struts-tags" %>的位置对换老是出问题,具体情况我现在还没有去分析过希望你们知道了告诉我下。谢谢
<%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags"  %>
<!-- 这里导入我们刚才定义的那个类,实例对象是mydecider这个名字 -->
<s:bean  var="mydecider" name="text.decider.Decider.MyDecider"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title></title>
</head>
<body>
	
	<!-- 使用我们自定义的条件进行数据的截取,只有符合含有"---"就可以看到-->
	<s:subset source="{
		'遮天---辰东','宙魔---西照','盘龙---番茄','吞噬星空---番茄','神墓---辰东'
	}" decider="#mydecider" var="newList"/>
	
	<table border="1" width="300">	
	<s:iterator status="st" value="#attr.newList">
		<tr>
			<td><s:property/></td>
		</tr>		
	</s:iterator>
	</table>
</body>
</html>
 

显示效果:

七、sort标签,对于指定的集合进行排序,这个标签使用必须提供自己的排序规则,实现自己的Compartor,当然就要实现java.util.Comparator接口了。
package action;

import java.util.Comparator;

public class MyComparator implements Comparator {

	@Override
	public int compare(Object o1, Object o2) {
		// TODO Auto-generated method stub
		//根据字符串长度来决定大小
		return o1.toString().length()-o2.toString().length();
	}

}

上面解释。如果两个数值比较的差是大于0那么第一个元素比第二个元素大,等于0相等,小于0,后面的大(这里的大是指在集合中的每个元素的字符串长度大小)

<%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags"  %>
<!-- 这里导入我们刚才定义的那个类,实例对象是mydecider这个名字 -->
<s:bean  var="mycomparator" name="action.MyComparator"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title></title>
</head>
<body>
<s:sort source="{'遮天---辰东','宙魔---西照','盘龙---番茄','吞噬星空---番茄','神墓---辰东'}" comparator="#mycomparator" var="newList"/>
<table border="1" width="300">
<s:iterator status="st" value="#attr.newList">
<tr><td><s:property/></td></tr>
</s:iterator></table>
</body></html>

效果显示:


终于写完了,本书其实我是按照书中的知识加上自己的理解翻译一次而已。如果那里写的不好,强烈要求指点。我不怕被人说,就怕你们不说我。哈哈 谢谢大家了

 

 







 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值