您的位置:首页 > 编程语言 > Java开发

struts控制标签的使用例子

2012-10-03 21:26 274 查看
在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>

效果显示:



终于写完了,本书其实我是按照书中的知识加上自己的理解翻译一次而已。如果那里写的不好,强烈要求指点。我不怕被人说,就怕你们不说我。哈哈 谢谢大家了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: