truts2的控制标签,主要用于完成流程控制,以及对ValueStack的控制。数据标签主要用于访问ValueStack中的数据;控制标签可以完成输出流程的控制,例如循环,分支等操作,也可以完成对集合的合并,排序等操作。
- <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
- <!--引入struts2的标签库-->
- <%@tagliburi="/struts-tags"prefix="s"%>
- <%
- Stringpath=request.getContextPath();
- StringbasePath=request.getScheme()+"://"
- +request.getServerName()+":"+request.getServerPort()
- +path+"/";
- %>
- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
- <html>
- <head>
- <basehref="<%=basePath%>">
- </head>
- <body>
- <h1>
- Struts2控制标签案例
- </h1>
- <!--
- <h3>OGNL中的集合操作</h3>
- <h5>OGNL直接生成List类型的集合</h5>
- 语法格式:{e1,e2,e3,e4,.......}
- 以上的语法中就直接生成了一个List类型的集合,该集合中包含的元素有:e1,e2,e3,e4,
- 如果需要更多的集合元素,则元素之间可以使用英文逗号分隔.
- <h5>OGNL直接生成Map类型的集合</h5>
- 语法格式:#{key:value,key1:value1,key2:value2,.....}
- 以上的语法中就直接生成了一个Map类型的集合,该Mapd对象中的每个key-value对象之间用英文的冒号隔开
- ,多个元素之间用逗号分隔。
- <h5>OGNL提供的对集合的操作符</h5>
- OGNL提供了两个元素符:in和notin
- in代表的是:判断某个元素是否在指定的集合中
- notin代表的是:某个元素是否不在指定的集合中
- 除此之外:OGNL还允许通过某个规则取得集合的子集。取得子集的操作符有:
- 1、?:取出所有符合选择逻辑的元素
- 2、^:取出符合选择逻辑的第一个元素
- 3、$:取出符合选择逻辑的最后一个元素
- <h4>控制标签</h4>
- Struts2的控制标签,主要用于完成流程控制,以及对ValueStack的控制。
- 数据标签主要用于访问ValueStack中的数据;控制标签可以完成输出流程的控制,例如循环,分支等操作
- 也可以完成对集合的合并,排序等操作。常见的控制标签有:
- if:用于控制选择输出的标签
- elseif:与if标签结合使用,用于控制选择输出的标签
- else:与if标签结合使用,用于控制选择输出的标签
- iterator:是一个迭代器,用于将集合迭代输出
- sort:用于对集合排序
- append:用于将多个集合拼接成一个新的集合
- generator:是一个字符串解析器,用于将一个字符串解析成一个新的集合
- merge:用于将多个集合拼接成一个新的集合,但与append的拼接方式有所有不同
- subset:用于截取集合的部分元素,形成一个新的集合
- -->
- <h5>
- if/elseif/else标签
- </h5>
- 这三个标签都是用于进行分支控制的,它们都是根据一个Boolean表达式的值,来决定是否计算、输出标签体的内容
- test:为boolean表达式如果为真执行标签体否则不执行
- <s:setname="score"value="80"></s:set>
- <s:iftest="%{#attr.score>60}">
- 成绩及格了.....
- </s:if>
- <s:elseiftest="%{#attr.score>35}">
- 成绩实在是太烂了....
- </s:elseif>
- <s:else>
- 成绩以及惨不忍睹.......
- </s:else>
- 上面的if/elseif/else标签组合使用与Java语言中的if/elseif/else条件控制结构相似
- <s:debug></s:debug>
- <h4>
- Iterator标签的使用
- </h4>
- Iterator标签主要用于对集合进行迭代,这里的集合包含List、Set和数组,也可以对Map类型的对象进行迭代输出
- 可以指定3个属性:value:这是一个可选属性,value属性指定的就是被迭代的集合,被迭代的集合通常
- 使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合
- id:这是可选属性,该属性指定了集合里的元素的ID
- status:可选属性,该属性指定了迭代时的IteratorStatus实例,通过该实例即可以判定当前迭代的元素的属性。
- 例如:是否是最后一个元素,以及当前迭代元素的索引等。IteratorStatus实例包含以下几个方法:int
- getCount()返回当前迭代了几个元素intgetIndex();返回当前元素的索引boolean
- isEven();返回当前迭代的索引是否是偶数booleanisFirst();返回当前迭代的索引是否是第一个元素boolean
- isLast();返回当前迭代的索引是否是最后一个元素booleanisOdd();返回当前迭代的索引是否是奇数
- var:当前迭代的元素begin:开始的位置end:结束的位置step:跨度
- <tableborder="1px"cellpadding="0"cellspacing="0">
- <caption>
- 图书名称信息
- </caption>
- <tr>
- <th>
- 图书的名称
- </th>
- </tr>
- <s:iteratorvar="name"
- value="{'HTML入门','Java基础','CSS入门','JavaWeb实战'}"status="st">
- <s:iftest="#st.odd">
- <trstyle="background-color:red;">
- <td>
- <s:propertyvalue="name"/>
- </td>
- </tr>
- </s:if>
- <s:else>
- <trstyle="background-color:green;">
- <td>
- <s:propertyvalue="name"/>
- </td>
- </tr>
- </s:else>
- </s:iterator>
- </table>
- 作业实现表格各行换色
- <tableborder="1px"cellpadding="0"cellspacing="0">
- <caption>
- 图书信息
- </caption>
- <tr>
- <th>
- 图书的名称
- </th>
- <th>
- 图书的作者
- </th>
- </tr>
- <s:iteratorvar="name"
- value="#{'HTML入门':'redarmy','Java基础':'lihui','CSS入门':'baobao','JavaWeb实战':'yq'}">
- <tr>
- <td>
- <s:propertyvalue="key"/>
- </td>
- <td>
- <s:propertyvalue="value"/>
- </td>
- </tr>
- </s:iterator>
- </table>
- <h5>
- append标签的使用
- </h5>
- append标签用于将多个对象拼接起来,形成一个新的集合
- <h5>
- List集合拼接
- </h5>
- <s:appendvar="newList">
- <s:paramvalue="{'HTML入门','Java基础','CSS入门','JavaWeb实战'}"></s:param>
- <s:paramvalue="{'HIbernate教程','Struts2教程'}"></s:param>
- </s:append>
- <tableborder="1px"cellpadding="1px"cellspacing="1px">
- <caption>
- 图书信息2
- </caption>
- <tr>
- <th>
- 图书名称
- </th>
- </tr>
- <s:iteratorvalue="#newList">
- <tr>
- <td>
- <s:property/>
- </td>
- </tr>
- </s:iterator>
- </table>
- <h5>
- Map集合的拼接
- </h5>
- <s:appendvar="newMap">
- <s:param
- value="#{'HTML入门':'redarmy','Java基础':'baobao','CSS入门':'李慧','JavaWeb实战':'yq'}"></s:param>
- <s:paramvalue="#{'HIbernate教程':'李刚','Struts2教程':'redarmy'}"></s:param>
- </s:append>
- <tableborder="1px"cellpadding="1px"cellspacing="1px">
- <caption>
- 图书信息2
- </caption>
- <tr>
- <th>
- 图书名称
- </th>
- <th>
- 图书作者
- </th>
- </tr>
- <s:iteratorvalue="#newMap">
- <tr>
- <td>
- <s:propertyvalue="key"/>
- </td>
- <td>
- <s:propertyvalue="value"/>
- </td>
- </tr>
- </s:iterator>
- </table>
- <h5>
- mapList集合的拼接
- </h5>
- <s:appendvar="newLM">
- <s:param
- value="#{'HTML入门':'redarmy','Java基础':'baobao','CSS入门':'李慧','JavaWeb实战':'yq'}"></s:param>
- <!--List方式要写成Map的形式但没有value值-->
- <s:paramvalue="#{'HIbernate教程','Struts2教程'}"></s:param>
- </s:append>
- <tableborder="1px"cellpadding="1px"cellspacing="1px">
- <caption>
- 图书信息2
- </caption>
- <tr>
- <th>
- 图书名称
- </th>
- <th>
- 图书作者
- </th>
- </tr>
- <s:iteratorvalue="#newLM">
- <tr>
- <td>
- <s:propertyvalue="key"/>
- </td>
- <td>
- <s:propertyvalue="value"/>
- </td>
- </tr>
- </s:iterator>
- </table>
- <h5>
- merge标签
- </h5>
- merge标签的用法看起来非常像append标签,但是有区别:
- <s:appendvar="ast">
- <s:paramvalue="{'html','css','ajax'}"></s:param>
- <s:paramvalue="{'java','jsp','servlet'}"></s:param>
- <s:paramvalue="{'struts2','mysql','hibernate'}"></s:param>
- </s:append>
- <s:mergevar="mst">
- <s:paramvalue="{'html','css','ajax'}"></s:param>
- <s:paramvalue="{'java','jsp','servlet'}"></s:param>
- <s:paramvalue="{'struts2','mysql','hibernate'}"></s:param>
- </s:merge>
- <h3>
- append标签拼接
- </h3>
- <s:iteratorvalue="#ast">
- <s:property/>
- </s:iterator>
- <h4>
- merge标签拼接
- </h4>
- <s:iteratorvalue="#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。
- <tableborder="1px">
- <tr>
- <th>
- 名称
- </th>
- </tr>
- <s:generatorval="'this,is,a,doctor'"separator=",">
- <!--由于在generator标签体内,该集合位于ValueStack的栈顶,故此处迭代的就是临时生成的集合-->
- <s:iteratorvar="bname">
- <tr>
- <td>
- <s:propertyvalue="bname"/>
- </td>
- </tr>
- </s:iterator>
- </s:generator>
- </table>
- <!--通过id标识此解析的集合存入到pageContext中-->
- <s:generatorseparator=","val="'this,is,a,man'"id="bks"></s:generator>
- <h1>
- 标签体外打印解析的字符串集合
- </h1>
- <s:iteratorvalue="#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:subsetsource="{'java','test','mybook','txs','lihui'}"start="1"
- count="3">
- <!--由于在subset标签体内,该子集位于ValueStack的栈顶,故此处迭代的就是临时生成的集合-->
- <s:iterator>
- <s:property/>
- </s:iterator>
- <!--注意1代表的是第二元素-->
- </s:subset>
- <h5>
- 实现自己的Decider实例
- </h5>
- <s:beanname="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:beanvar="mycomparator"name="edu.dc.MyComparator"></s:bean>
- <s:sortcomparator="#mycomparator"
- source="{'JavaEE','css','JavaHTMl'}">
- <s:iterator>
- <s:property/>
- </s:iterator>
- </s:sort>
- </body>
- </html>
- /**以上用到的Subset标签用到的bean类如下*/
- packageedu.dc;
- importorg.apache.struts2.util.*;
- /**自定定义Decider类,实现SubsetIteratorFilter.Decider*/
- publicclassMyDeciderimplementsSubsetIteratorFilter.Decider{
- /**实现Decider接口中的decide方法,该方法决定集合中的元素是否被选入到子集中*/
- publicbooleandecide(Objectarg0)throwsException{
- System.out.println("----------------");
- /**把arg0造型为字符串*/
- Stringstr=(String)arg0;
- /**如果集合中包含java那么即可被选入到子集中*/
- System.out.println("----------------"+(str.indexOf("Java")>0));
- return(str.indexOf("Java")>0);
- }
- }
- /**以下是sort标签实例中用到的备案实例*/
- packageedu.dc;
- importjava.util.Comparator;
- /**需要实现Comparator接口*/
- publicclassMyComparatorimplementsComparator<String>{
- /**
- *如果该方法返回一个大于0的整数,则第一个元素大于第二元素,如果为0则相同如果小于零,则第一个元素小于第二元素
- */
- publicintcompare(Stringo1,Stringo2){
- /**根据字符串的长度决定字符串的大小*/
- return(o1.length()-o2.length());
- }
- }
- <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
- <!--引入struts2的标签库-->
- <%@tagliburi="/struts-tags"prefix="s"%>
- <%
- Stringpath=request.getContextPath();
- StringbasePath=request.getScheme()+"://"
- +request.getServerName()+":"+request.getServerPort()
- +path+"/";
- %>
- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
- <html>
- <head>
- <basehref="<%=basePath%>">
- </head>
- <body>
- <h1>
- Struts2控制标签案例
- </h1>
- <!--
- <h3>OGNL中的集合操作</h3>
- <h5>OGNL直接生成List类型的集合</h5>
- 语法格式:{e1,e2,e3,e4,.......}
- 以上的语法中就直接生成了一个List类型的集合,该集合中包含的元素有:e1,e2,e3,e4,
- 如果需要更多的集合元素,则元素之间可以使用英文逗号分隔.
- <h5>OGNL直接生成Map类型的集合</h5>
- 语法格式:#{key:value,key1:value1,key2:value2,.....}
- 以上的语法中就直接生成了一个Map类型的集合,该Mapd对象中的每个key-value对象之间用英文的冒号隔开
- ,多个元素之间用逗号分隔。
- <h5>OGNL提供的对集合的操作符</h5>
- OGNL提供了两个元素符:in和notin
- in代表的是:判断某个元素是否在指定的集合中
- notin代表的是:某个元素是否不在指定的集合中
- 除此之外:OGNL还允许通过某个规则取得集合的子集。取得子集的操作符有:
- 1、?:取出所有符合选择逻辑的元素
- 2、^:取出符合选择逻辑的第一个元素
- 3、$:取出符合选择逻辑的最后一个元素
- <h4>控制标签</h4>
- Struts2的控制标签,主要用于完成流程控制,以及对ValueStack的控制。
- 数据标签主要用于访问ValueStack中的数据;控制标签可以完成输出流程的控制,例如循环,分支等操作
- 也可以完成对集合的合并,排序等操作。常见的控制标签有:
- if:用于控制选择输出的标签
- elseif:与if标签结合使用,用于控制选择输出的标签
- else:与if标签结合使用,用于控制选择输出的标签
- iterator:是一个迭代器,用于将集合迭代输出
- sort:用于对集合排序
- append:用于将多个集合拼接成一个新的集合
- generator:是一个字符串解析器,用于将一个字符串解析成一个新的集合
- merge:用于将多个集合拼接成一个新的集合,但与append的拼接方式有所有不同
- subset:用于截取集合的部分元素,形成一个新的集合
- -->
- <h5>
- if/elseif/else标签
- </h5>
- 这三个标签都是用于进行分支控制的,它们都是根据一个Boolean表达式的值,来决定是否计算、输出标签体的内容
- test:为boolean表达式如果为真执行标签体否则不执行
- <s:setname="score"value="80"></s:set>
- <s:iftest="%{#attr.score>60}">
- 成绩及格了.....
- </s:if>
- <s:elseiftest="%{#attr.score>35}">
- 成绩实在是太烂了....
- </s:elseif>
- <s:else>
- 成绩以及惨不忍睹.......
- </s:else>
- 上面的if/elseif/else标签组合使用与Java语言中的if/elseif/else条件控制结构相似
- <s:debug></s:debug>
- <h4>
- Iterator标签的使用
- </h4>
- Iterator标签主要用于对集合进行迭代,这里的集合包含List、Set和数组,也可以对Map类型的对象进行迭代输出
- 可以指定3个属性:value:这是一个可选属性,value属性指定的就是被迭代的集合,被迭代的集合通常
- 使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合
- id:这是可选属性,该属性指定了集合里的元素的ID
- status:可选属性,该属性指定了迭代时的IteratorStatus实例,通过该实例即可以判定当前迭代的元素的属性。
- 例如:是否是最后一个元素,以及当前迭代元素的索引等。IteratorStatus实例包含以下几个方法:int
- getCount()返回当前迭代了几个元素intgetIndex();返回当前元素的索引boolean
- isEven();返回当前迭代的索引是否是偶数booleanisFirst();返回当前迭代的索引是否是第一个元素boolean
- isLast();返回当前迭代的索引是否是最后一个元素booleanisOdd();返回当前迭代的索引是否是奇数
- var:当前迭代的元素begin:开始的位置end:结束的位置step:跨度
- <tableborder="1px"cellpadding="0"cellspacing="0">
- <caption>
- 图书名称信息
- </caption>
- <tr>
- <th>
- 图书的名称
- </th>
- </tr>
- <s:iteratorvar="name"
- value="{'HTML入门','Java基础','CSS入门','JavaWeb实战'}"status="st">
- <s:iftest="#st.odd">
- <trstyle="background-color:red;">
- <td>
- <s:propertyvalue="name"/>
- </td>
- </tr>
- </s:if>
- <s:else>
- <trstyle="background-color:green;">
- <td>
- <s:propertyvalue="name"/>
- </td>
- </tr>
- </s:else>
- </s:iterator>
- </table>
- 作业实现表格各行换色
- <tableborder="1px"cellpadding="0"cellspacing="0">
- <caption>
- 图书信息
- </caption>
- <tr>
- <th>
- 图书的名称
- </th>
- <th>
- 图书的作者
- </th>
- </tr>
- <s:iteratorvar="name"
- value="#{'HTML入门':'redarmy','Java基础':'lihui','CSS入门':'baobao','JavaWeb实战':'yq'}">
- <tr>
- <td>
- <s:propertyvalue="key"/>
- </td>
- <td>
- <s:propertyvalue="value"/>
- </td>
- </tr>
- </s:iterator>
- </table>
- <h5>
- append标签的使用
- </h5>
- append标签用于将多个对象拼接起来,形成一个新的集合
- <h5>
- List集合拼接
- </h5>
- <s:appendvar="newList">
- <s:paramvalue="{'HTML入门','Java基础','CSS入门','JavaWeb实战'}"></s:param>
- <s:paramvalue="{'HIbernate教程','Struts2教程'}"></s:param>
- </s:append>
- <tableborder="1px"cellpadding="1px"cellspacing="1px">
- <caption>
- 图书信息2
- </caption>
- <tr>
- <th>
- 图书名称
- </th>
- </tr>
- <s:iteratorvalue="#newList">
- <tr>
- <td>
- <s:property/>
- </td>
- </tr>
- </s:iterator>
- </table>
- <h5>
- Map集合的拼接
- </h5>
- <s:appendvar="newMap">
- <s:param
- value="#{'HTML入门':'redarmy','Java基础':'baobao','CSS入门':'李慧','JavaWeb实战':'yq'}"></s:param>
- <s:paramvalue="#{'HIbernate教程':'李刚','Struts2教程':'redarmy'}"></s:param>
- </s:append>
- <tableborder="1px"cellpadding="1px"cellspacing="1px">
- <caption>
- 图书信息2
- </caption>
- <tr>
- <th>
- 图书名称
- </th>
- <th>
- 图书作者
- </th>
- </tr>
- <s:iteratorvalue="#newMap">
- <tr>
- <td>
- <s:propertyvalue="key"/>
- </td>
- <td>
- <s:propertyvalue="value"/>
- </td>
- </tr>
- </s:iterator>
- </table>
- <h5>
- mapList集合的拼接
- </h5>
- <s:appendvar="newLM">
- <s:param
- value="#{'HTML入门':'redarmy','Java基础':'baobao','CSS入门':'李慧','JavaWeb实战':'yq'}"></s:param>
- <!--List方式要写成Map的形式但没有value值-->
- <s:paramvalue="#{'HIbernate教程','Struts2教程'}"></s:param>
- </s:append>
- <tableborder="1px"cellpadding="1px"cellspacing="1px">
- <caption>
- 图书信息2
- </caption>
- <tr>
- <th>
- 图书名称
- </th>
- <th>
- 图书作者
- </th>
- </tr>
- <s:iteratorvalue="#newLM">
- <tr>
- <td>
- <s:propertyvalue="key"/>
- </td>
- <td>
- <s:propertyvalue="value"/>
- </td>
- </tr>
- </s:iterator>
- </table>
- <h5>
- merge标签
- </h5>
- merge标签的用法看起来非常像append标签,但是有区别:
- <s:appendvar="ast">
- <s:paramvalue="{'html','css','ajax'}"></s:param>
- <s:paramvalue="{'java','jsp','servlet'}"></s:param>
- <s:paramvalue="{'struts2','mysql','hibernate'}"></s:param>
- </s:append>
- <s:mergevar="mst">
- <s:paramvalue="{'html','css','ajax'}"></s:param>
- <s:paramvalue="{'java','jsp','servlet'}"></s:param>
- <s:paramvalue="{'struts2','mysql','hibernate'}"></s:param>
- </s:merge>
- <h3>
- append标签拼接
- </h3>
- <s:iteratorvalue="#ast">
- <s:property/>
- </s:iterator>
- <h4>
- merge标签拼接
- </h4>
- <s:iteratorvalue="#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。
- <tableborder="1px">
- <tr>
- <th>
- 名称
- </th>
- </tr>
- <s:generatorval="'this,is,a,doctor'"separator=",">
- <!--由于在generator标签体内,该集合位于ValueStack的栈顶,故此处迭代的就是临时生成的集合-->
- <s:iteratorvar="bname">
- <tr>
- <td>
- <s:propertyvalue="bname"/>
- </td>
- </tr>
- </s:iterator>
- </s:generator>
- </table>
- <!--通过id标识此解析的集合存入到pageContext中-->
- <s:generatorseparator=","val="'this,is,a,man'"id="bks"></s:generator>
- <h1>
- 标签体外打印解析的字符串集合
- </h1>
- <s:iteratorvalue="#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:subsetsource="{'java','test','mybook','txs','lihui'}"start="1"
- count="3">
- <!--由于在subset标签体内,该子集位于ValueStack的栈顶,故此处迭代的就是临时生成的集合-->
- <s:iterator>
- <s:property/>
- </s:iterator>
- <!--注意1代表的是第二元素-->
- </s:subset>
- <h5>
- 实现自己的Decider实例
- </h5>
- <s:beanname="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:beanvar="mycomparator"name="edu.dc.MyComparator"></s:bean>
- <s:sortcomparator="#mycomparator"
- source="{'JavaEE','css','JavaHTMl'}">
- <s:iterator>
- <s:property/>
- </s:iterator>
- </s:sort>
- </body>
- </html>
- /**以上用到的Subset标签用到的bean类如下*/
- packageedu.dc;
- importorg.apache.struts2.util.*;
- /**自定定义Decider类,实现SubsetIteratorFilter.Decider*/
- publicclassMyDeciderimplementsSubsetIteratorFilter.Decider{
- /**实现Decider接口中的decide方法,该方法决定集合中的元素是否被选入到子集中*/
- publicbooleandecide(Objectarg0)throwsException{
- System.out.println("----------------");
- /**把arg0造型为字符串*/
- Stringstr=(String)arg0;
- /**如果集合中包含java那么即可被选入到子集中*/
- System.out.println("----------------"+(str.indexOf("Java")>0));
- return(str.indexOf("Java")>0);
- }
- }
- /**以下是sort标签实例中用到的备案实例*/
- packageedu.dc;
- importjava.util.Comparator;
- /**需要实现Comparator接口*/
- publicclassMyComparatorimplementsComparator<String>{
- /**
- *如果该方法返回一个大于0的整数,则第一个元素大于第二元素,如果为0则相同如果小于零,则第一个元素小于第二元素
- */
- publicintcompare(Stringo1,Stringo2){
- /**根据字符串的长度决定字符串的大小*/
- return(o1.length()-o2.length());
- }
- }