Struts2控制标签的学习

Struts2控制标签

Struts2的控制标签,主要用于完成流程控制控制标签可以完成输出流程的控制,例如循环、分支等操作,也可以完成对集合的合并、排序等操作。

1、if、else if、else标签

if标签用来控制基本的条件处理流程,通常和else标签或者elseif标签连用。

其参数、属性为

在这里插入图片描述

<%@page contentType=text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>控制标签的使用</title>
    </head>
    <body>
        <s:set var="score" value="60"/>
        <s:if test="#score>=90">优秀</s:if>
        <s:elseif test="#score>=80">良好</s:elseif>
        <s:elseif test="#score>=70">中等</s:elseif>
        <s:elseif test="#score>=60">及格</s:elseif>
        <s:else>不及格</s:else>
    </body>
</html>

这个例子是通过if、elseif、else控制标签连用的,跟Java语法下的if、else if、else是十分相似的,上面这个例子中,使用if控制标签的test属性,为true的话就执行if控制标签的内容,为false的话就去判断elseif控制标签的test属性,为true的话就执行elseif控制标签的内容,为false的话就去直接去执行else控制标签里的内容了,这里明显为true,所以显示的就为elseif控制标签里的内容了!

2、iterator标签

用于迭代一个集合,可以是Collection,Map,Enumeration,Iterator,array。迭代过程会把每一个对象暂时压入值栈,这样标签的内部就可以直接访问对象的属性和方法,标签完毕后,值栈内容被删除。

其参数,属性为:
在这里插入图片描述

IteratorStatus实例包含以下几个方法:

  • int getConut() 返回当前迭代了几个元素。

  • int geIndex() 返回当前元素的索引。

  • boolean isEven() 返回当前迭代的索引是否是偶数。

  • boolean isOdd() 返回当前迭代的索引是否是奇数。

  • boolean isFirst() 返回当前迭代的索引是否是第一个元素。

  • boolean isLast() 返回当前迭代的索引是否是最后一个元素。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>iterator标签的使用</title>
    </head>
    <body>
        <h2>iterator标签的使用</h2>
        <hr>
	<s:iterator value="{'Java程序设计与项目实训教程(第2版)', 'JSP程序设计技术教程(第2版)','JSP程序设计与项目实训教程(第2版)','Struts2+Hibernate框架技术教程','Web框架技术(Struts2+Hibernate5+Spring5)教程(第2版)'}"
		var="bookName">
            <s:property value="bookName"/><br>
	</s:iterator>
    </body>
</html>

在这里插入图片描述

iterator.jsp页面中我们使用iterator控制标签来迭代一个集合,该标签的value值即为我们所迭代的集合,并通过property标签获取该集合

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>iterator标签的使用</title>
    </head>
    <body>
        <h2>iterator标签的使用</h2>
        <hr>
         <table border="1">
            <s:iterator value="{'Java程序设计与项目实训教程(第2版)', 'JSP程序设计技术教程(第2版)','JSP程序设计与项目实训教程(第2版)','Struts2+Hibernate框架技术教程(第2版)','Web框架技术(Struts2+Hibernate5+Spring5)教程(第2版)'}"
                    var="bookName" status="st">
                <tr <s:if test="#st.odd">style="background-color:red"</s:if>>
                    <td><s:property value="bookName"/><br></td>
                </tr>
            </s:iterator>
        </table>
    </body>
</html>

在这里插入图片描述

使用#st.odd来指定if标签的test属性,odd又是IteratorStatus的方法,返回当前迭代的集合的索引是否是奇数,即如果迭代的集合中的索引为奇数的话,就把迭代到的索引对应的内容样式的背景颜色改为红色,使用<s:property value=“bookName”/>来获取到上面指定的iterator标签的集合,是通过iterator标签的id属性值来获得的

3、append标签

用于将多个集合对象拼接起来,组成一个新的集合,通过这种拼接,从而允许通过一个<s:iterator/>标签就完成多个集合的迭代。在append标签内部,使用param标签指定集合。通常和iterator标签一起使用!

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>append标签的使用</title>
    </head>
    <body>
        <h2>append标签的使用</h2>
        <hr>
        <s:append var="newList">    
           <s:param value="{'Java程序设计与项目实训教程(第2版)', 'JSP程序设计与项目实训教程(第2版)','Web框架技术(Struts2+Hibernate5+Spring5)教程(第2版)'}"/>
           <s:param value="{'Java程序设计', 'JSP程序设计','SSH技术'}"/>
        </s:append>
        <table border="1">
            <s:iterator value="#newList" status="st">
                <tr <s:if test="#st.odd">style="background-color:red"</s:if>>
                    <td><s:property /></td>
                </tr>
            </s:iterator>
        </table>
    </body>
</html>

在这里插入图片描述

4、merge标签

与append标签十分类似,它们都是将多个集合拼接成一起,它们的区别在于拼接后集合元素顺序的不同。

假设有两个集合的话,区别如下:

append方式拼接,新元素的顺序为:

  • 第一个集合中的第一个元素;

  • 第一个集合中的第二个元素;

  • 第二个集合中的第一个元素;

  • 第二个集合中的第二个元素;

merge方式拼接,新元素的顺序为:

  • 第一个集合中的第一个元素;

  • 第二个集合中的第一个元素;

  • 第一个集合中的第一个元素;

  • 第二个集合中的第二个元素;

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>merge标签的使用</title>
    </head>
    <body>
        <h3>merge标签的使用</h3>
        <hr>
        <s:append var="newList_append">
            <s:param value="{'集合1中的元素1','集合1中的元素2','集合1中的元素3'}"/>
            <s:param value="{'集合2中的元素1','集合2中的元素2'}"/>
	</s:append>
	<s:merge var="newList_merge">
            <s:param value="{'集合1中的元素1','集合1中的元素2','集合1中的元素3'}" />
            <s:param value="{'集合2中的元素1','集合2中的元素2'}" />
	</s:merge>
        <br>
	迭代输出由append标签产生的新集合
	<s:iterator value="#newList_append" status="st">
             <br>
            <s:property />
           
	</s:iterator>
            <br>
        迭代输出由merge标签产生的新集合
	<s:iterator value="#newList_merge" status="st">
            <br>
            <s:property />
	</s:iterator>
    </body>
</html>

在这里插入图片描述

5、generator标签

generator标签可以将指定字符串按指定分隔符分割成多个字串。 生成的多个字串可以用iterator标签进行迭代输出。

名字是否必选描述
val属性必填属性指定被解析的字符串
count属性可选属性指定生成集合中元素的总数
separator属性必填属性指定用于分割字符串的分隔符
converter属性可选属性指定一个转换器,转换器负责将生成的集合中的每个字符串转换成对象
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>generator标签的使用</title>
    </head>
    <body>
        <h3>generator标签的使用</h3>
        <hr>
        <s:generator val="'Java程序设计与项目实训教程(第2版),JSP程序设计与项目实训教程(第2版),Web框架技术(Struts2+Hibernate5+Spring5)教程(第2版)'" separator=",">
            <s:iterator status="st">
                <br>
		<s:property />
            </s:iterator>
	</s:generator>
    </body>
</html>

通过上面这个例子的代码可以看到,一个字符串==" Java程序设计与项目实训教程(第2版),JSP程序设计与项目实训教程(第2版),Web框架技术(Struts2+Hibernate5+Spring5)教程(第2版)"==通过号分隔符将它分割了4个字串,并根据iterator迭代标签将分割后的内容显示出来。结果如下:*

在这里插入图片描述

6、subset标签

用于取得集合的子集,该标签的底层通过:org.apache.struts2.util.SubsetIteratorFilte类提供实现。

其属性有:

名字是否必选描述
source可选属性指定源集合
count可选属性代表子集中的元素个数,如果没有指定代表源集合的全部元素
start可选属性从第几元素开始截取
decider可选属性指定由开发者自己决定是否选中该元素
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>subset标签的使用</title>
    </head>
    <body>
        <h3>subset标签的使用</h3>
        <hr>
        <s:subset source="{'Java程序设计与项目实训教程(第2版)', 'JSP程序设计与项目实训教程(第2版)','JSP程序设计技术教程(第2版)','Struts2+Hibernate框架技术教程(第2版)','Web框架技术(Struts2+Hibernate5+Spring5)教程(第2版)'}" start="1" count="3">
            <s:iterator status="st">
                <br>
                <s:property />
            </s:iterator>
	</s:subset>
    </body>
</html>

在这里插入图片描述

==start=“1” count=“3”==表示从原集合中第2个元素开始,向后截取3个元素,由此生成一个新集合。并用iterator标签进行迭代

7、sort标签

用于对指定集合元素进行排序,进行排序时,必须提供自己的排序规则,即实现自己的Comparator,自己的Comparator需要实现java.util.Comparator接口。

名字是否必选描述
comparator必填属性指定进行排序的comparator的实例
source可选属性指定排序的集合
package com.zzuli.util;

import java.util.Comparator;

    public class MyComparator implements Comparator{
	@Override
	public int compare(Object element2, Object element1){
		return element1.toString().length()-element2.toString().length();
	}
}
    
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>sort标签的使用</title>
    </head>
    <body>
        <h3>使用sort标签对集合进行排序</h3>
        <hr>
        <s:bean var="mc" name="com.zzuli.util.MyComparator" />
	<s:sort source="{'a','aa','aaa'}"
		comparator="#mc">
            <s:iterator status="st">
                <br>
		<s:property />
            </s:iterator>
	</s:sort>
    </body>
</html>

在这里插入图片描述

示例解析,通过==<s:sort source="{‘a’,‘aa’,‘aaa’}" comparator="#mc">这行代码,由属性source可知指定排序的集合是’a’,‘aa’,‘aaa’==,由comparator可知道指定排序的Comparator实例是由bean标签指定的SortComparator类,这个类通过两个长度的比较进行排序并且是返回值是第二个数的长度减去第一个数的长度,所以是从长度长的排下去。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值