今天看了这个博客,感觉挺详细的,对我也现在也很有帮助,所以转载一下,希望对大家有些帮助
好东西就要分享一下:
Struts2的控制标签,主要用于完成流程控制,以及对ValueStack的控制。数据标签主要用于访问ValueStack中的数据;控制标签可以完成输出流程的控制,例如循环,分支等操作,也可以完成对集合的合并,排序等操作。
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib uri="/struts-tags" prefix="s"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme() + "://"
- + request.getServerName() + ":" + request.getServerPort()
- + path + "/";
- %>
- >
- <html>
- <head>
- <base href="<%=basePath%>">
- head>
- <body>
- <h1>
- Struts2控制标签案例
- h1>
- <s:param value="#{'HIbernate教程','Struts2教程'}">s:param>
- s:append>
- <table border="1px" cellpadding="1px" cellspacing="1px">
- <caption>
- 图书信息2
- caption>
- <tr>
- <th>
- 图书名称
- th>
- <th>
- 图书作者
- th>
- tr>
- <s:iterator value="#newLM">
- <tr>
- <td>
- <s:property value="key" />
- td>
- <td>
- <s:property value="value" />
- td>
- tr>
- s:iterator>
- table>
- <h5>
- merge标签
- h5>
- merge标签的用法看起来非常像append标签,但是有区别:
- <s:append var="ast">
- <s:param value="{'html','css','ajax'}">s:param>
- <s:param value="{'java','jsp','servlet'}">s:param>
- <s:param value="{'struts2','mysql','hibernate'}">s:param>
- s:append>
- <s:merge var="mst">
- <s:param value="{'html','css','ajax'}">s:param>
- <s:param value="{'java','jsp','servlet'}">s:param>
- <s:param value="{'struts2','mysql','hibernate'}">s:param>
- s:merge>
- <h3>
- append标签拼接
- h3>
- <s:iterator value="#ast">
- <s:property />
- s:iterator>
- <h4>
- merge标签拼接
- h4>
- <s:iterator value="#mst">
- <s:property />
- s:iterator>
- 以上看出:append标签的拼接方式是: 第1个集合中的第一个元素 第1个集合中的第二个元素 第1个集合中的第三个元素
- 第2个集合中的第一个元素 第2个集合中的第二个元素 第2个集合中的第三个元素 第3个集合中的第一个元素 第3个集合中的第二个元素
- 第3个集合中的第三个元素 merge标签的拼接方式是: 第1个集合中的第一个元素 第2个集合中的第一个元素 第3个集合中的第一个元素
- 第1个集合中的第二个元素 第2个集合中的第二个元素 第3个集合中的第二个元素 第1个集合中的第三个元素 第2个集合中的第三个元素
- 第3个集合中的第三个元素
- <h5>
- generator标签
- h5>
- 将制定的字符串按指定的分隔符分隔成多个字串. count:可选属性,指定生成集合中元素的总数
- separator:必填属性:指定解析字符串的分隔符 val:必填属性:指定解析字符串
- converter:可选属性,转换器,该转换器负责将集合中的每个字符串转换成对象
- id:可选属性,如果指明该属性则生成的集合放入到pageContext属性中 注释:generator分隔的字符串
- ,如果在标签体内,整个临时生成的集合将位于ValueStack的顶端 .但标签结束时,被移出ValueStack。
- <table border="1px">
- <tr>
- <th>
- 名称
- th>
- tr>
- <s:generator val="'this,is,a,doctor'" separator=",">
- <s:iterator var="bname">
- <tr>
- <td>
- <s:property value="bname" />
- td>
- tr>
- s:iterator>
- s:generator>
- table>
- <s:generator separator="," val="'this,is,a,man'" id="bks">s:generator>
- <h1>
- 标签体外打印解析的字符串集合
- h1>
- <s:iterator value="#attr.bks">
- <s:property />
- s:iterator>
- <h1>
- subset标签
- h1>
- subset标签用于取得集合的子集,该标签的底层通过:org.apache.struts2.uitl.SubsetIteratorFilte类提供实现
- 属性: count:可选属性:代表子集中的元素个数,如果没有指定代表源集合的全部元素
- source:可选属性:指定源集合,如果没有指定代表是valueStack的栈顶集合 start:可选属性:从第几元素开始截取
- decider:可选属性:指定由开发者自己决定是否选中该元素。 注意事项:
- 在subset标签内时,subset标签生成的子集位于valueStack的栈顶,如果标签结束,该标签生成的子集
- 将被移出valueStack栈。
- <s:subset source="{'java','test','mybook','txs','lihui'}" start="1"
- count="3">
- <s:iterator>
- <s:property />
- s:iterator>
- s:subset>
- <h5>
- 实现自己的Decider实例
- h5>
- <s:bean name="edu.dc.MyDecider" id="mydecider">s:bean>
- <h6>
- 通过自己定义的Decider实例来截取目标集合,生成子集
- h6>
- <s:subset
- source="{'01Java入门','JSP入门','Servlet入门','02Java基础案例','基于Java的经典案例'}"
- decider="#mydecider">
- <s:iterator>
- <s:property />
- s:iterator>
- s:subset>
- <h1>
- sort标签
- h1>
- 用于对指定集合元素进行排序,进行排序时,必须提供自己的排序规则,即实现自己的
- Comparator,自己的Comparator需要实现java.util.Comparator接口 属性:
- comparator:必填属性,指定进行排序的comparator的实例
- source:可选属性:指定排序的集合,如果没有指定代表是valueStack的栈顶集合 备注:
- 在sort标签内时,sort标签生成的子集位于valueStack的栈顶,如果标签结束,该标签生成的子集
- 将被移出valueStack栈。
- <s:bean var="mycomparator" name="edu.dc.MyComparator">s:bean>
- <s:sort comparator="#mycomparator"
- source="{'JavaEE','css','JavaHTMl'}">
- <s:iterator>
- <s:property />
- s:iterator>
- s:sort>
- body>
- html>
- /**以上用到的Subset标签用到的bean类如下*/
- package edu.dc;
- import org.apache.struts2.util.*;
- /** 自定定义Decider类,实现SubsetIteratorFilter.Decider */
- public class MyDecider implements SubsetIteratorFilter.Decider {
- /** 实现Decider接口中的decide方法,该方法决定集合中的元素是否被选入到子集中 */
- public boolean decide(Object arg0) throws Exception {
- System.out.println("----------------");
- /** 把arg0造型为字符串 */
- String str = (String) arg0;
- /** 如果集合中包含java 那么即可被选入到子集中 */
- System.out.println("----------------" + (str.indexOf("Java") > 0));
- return (str.indexOf("Java") > 0);
- }
- }
- /**以下是sort标签实例中用到的备案实例*/
- package edu.dc;
- import java.util.Comparator;
- /** 需要实现Comparator接口 */
- public class MyComparator implements Comparator<String> {
- /**
- * 如果该方法返回一个大于0的整数,则第一个元素大于第二元素,如果为0则相同 如果小于零,则第一个元素小于第二元素
- */
- public int compare(String o1, String o2) {
- /** 根据字符串的长度决定字符串的大小 */
- return (o1.length() - o2.length());
- }
- }
原文出自:http://redarmychen.iteye.com/blog/841906