Struts2的标签库(三)

      ——控制标签

1.if/elseif/else标签

  用于分支控制,取代JSP中的if语句,根据一个boolean(test属性的值)值判断是否进行下一步运算或者输出等。

  <s:if>可以单独使用,而<s:elseif>和<s:else>必须和<s:if>结合使用,在一个循环中必须只有一个<s:if>,没有或有几个<s:elseif>,最多有一个<s:else>。

  使用例子:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 导入Struts2的标签库 -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 使用if/elseif/else标签 -->
<!-- 在Stack Context中定义一个age属性 ,其值为24-->
<s:set name="age" value="24"/>
<!-- 如果age的属性小于18,输出少年 -->
<s:if test="#age<=18">
    少年
</s:if>
<!-- 如果age>18并且age<30,输出青年 -->
<s:elseif test="#age>18&&#age<=30">
    青年
</s:elseif>
<!-- 如果age>30且age<50,输出中年 -->
<s:elseif test="#age>30&&#age<=50">
    中年
</s:elseif>
<!-- 其他,输出老年 -->
<s:else>
    老年
</s:else>
</body>
</html>

2.iterator标签

  用于对集合的迭代,可以是List、Map或者Set集合,也可以是一个数组。

  在<s:iterator>标签中可以指定三个属性:

    value:可选属性,指定一个集合,如果没有指定这个属性则使用ValueStack栈顶的集合;

    id:可选属性,指定集合中元素的ID;

    status:可选属性,指定迭代时的IteratorStatus实例,通过该实例可以判断当前迭代元素的属性。如元素的索引等。

  在IteratorStatus实例中有如下几个常用的方法:

  (1)int getCount():返回当前已迭代元素的数量;

  (2)int getIndex():返回当前迭代元素的索引;

  (3)boolean isEven():判断当前被迭代的元素索引是否为偶数;

  (4)boolean isFirst():判断当前被迭代的元素是否是第一个元素;

  (5)boolean isLast():判断当前被迭代的元素是否是最后一个元素;

  (6)boolean isOdd():判断当前被迭代的元素索引是否是一个奇数。

  示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 使用iterator标签迭代输出List集合 -->
<s:iterator
    value="{'a','b','c','d'}"
    id="world"
>
    <s:property value="world"/>,
</s:iterator>
<!-- 使用iterator标签迭代输出List集合,并指定status属性 -->
<!-- 当值大于10并且索引数为偶数时,输出此元素 -->
<s:iterator
    value="{1,5,12,4,18,60,19,2}"
    id="num"
    status="st"
>
<s:if test="#st.even&&#num>10">
    <s:property value="num"/>
</s:if>
</s:iterator>
</body>
</html>

3.append标签

  用于把多个集合拼接成一个新的集合,这个新的集合就可以通过一个iterator来迭代了。

  在此标签中的属性如下:

  var:指定新产生的集合的名字,并把该集合放入Stack Context的顶端,如果不指定此属性则不放入Stack Context中。

  在此标签中有子标签<s:param>子标签中的内容就是所要拼接的集合,在一个append标签下允许出现多个<s:param>标签,可以是相同类型的集合拼接,也可以是不同类型的集合拼接。

  示例如下:注意当两个不同类型的集合相互拼接时,不同的情况

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 两个List集合的拼接 -->
<s:append var="num">
    <s:param
        value="{1,2,3,4,5}"
    />
    <s:param
        value="{4,5,6,7,8}"
    />
</s:append>
<!-- 遍历输出此行生成的集合 -->
<s:iterator
    value="#num"
    id="test1"
    status="st_1"
>
<s:if    test="#st_1.even">
    <s:property value="test1"/>
</s:if>
</s:iterator>
<hr/>
<!-- 两个Map集合的拼接 -->
<s:append var="student">
    <s:param
        value="#{1:'张三',2:'李四',3:'王五'}"
    />
    <s:param
        value="#{4:'路人甲',5:'路人乙',6:'路人丙'}"
    />
</s:append>
<s:iterator
    value="#student"
>
    <s:property value="key"/>:<s:property value="value"/><br/>
</s:iterator>
<!-- 一个List和一个Map的拼接(一) -->
<s:append var="teacher">
    <!-- List 这个List实际上是以创建Map的方法创建的,它的key为其中的元素,value为空-->
    <s:param
        value="#{1,2,3}"
    />
    <!-- Map -->
    <s:param
        value="#{1:'路人甲',2:'路人乙',3:'路人丙'}"
    />
</s:append>
<s:iterator
    value="#teacher"
    id="test2"
>
    key=<s:property value="key"/>,value=<s:property value="value"/>
</s:iterator>
<hr/>
<!-- 一个List和一个Map的拼接(二) -->
<s:append var="teacher_1">
    <!-- List -->
    <s:param
        value="{1,2,3}"
    />
    <!-- Map -->
    <s:param
        value="#{1:'路人甲',2:'路人乙',3:'路人丙'}"
    />
</s:append>
<s:iterator
    value="#teacher_1"
    id="test3"
>
    key=<s:property value="key"/>,value=<s:property value="value"/>
</s:iterator>
<hr/>
<!-- 一个List和一个Map的拼接(三) -->
<s:append var="teacher_2">
    <!-- List -->
    <s:param
        value="{1,2,3}"
    />
    <!-- Map -->
    <s:param
        value="#{1:'路人甲',2:'路人乙',3:'路人丙'}"
    />
</s:append>
<s:iterator
    value="#teacher_2"
    id="test3"
>
    <s:property value="#test3"/>
</s:iterator>
</body>
</html>

4.generator标签

  类似于String中的split()方法,将指定字符串按照指定字符分割成几个子串,这些子串将生成一个集合被临时放在ValueStack顶端,当这个标签结束后,该集合将会被移出ValueStack栈。

  generator标签中有如下几个属性:

  count:可选属性,指定生成集合中元素的个数。

  separator:必须属性,指定用于解析字符串的分隔符。

  val:必须属性,指定被解析的字符串。

  convertor:可选属性,指定一个转换器,将集合中的每个字符串转换成对象,可以将一个字符串解析成对象集合。

  var:可选属性,指定该属性后,生成的Iterator对象将被放在Stack Context顶端。

示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- generator标签的使用示例 -->
<s:generator
    separator=","
    val="'张三,李四,王五'"
    count="2"
    var="names"
    >
    <s:iterator
        value="#names"
    >
        <s:property/>
    </s:iterator>
</s:generator>
</body>
</html>

5.merge标签

  此标签也是用于集合之间的拼接,但拼接方式与append标签的拼接方式有所不同,我们通过例子来比较使用merge标签和使用append标签拼接集合时的不同之处。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
=====使用append标签拼接集合=====
<br/>
<s:append var="names_append">
    <s:param value="{'A','B','C','D','E'}"/>
    <s:param value="{'a','b','c','d','e'}"/>
</s:append>
<s:iterator
    value="#names_append"
    id="test_append"
>
    <s:property value="test_append"/>,
</s:iterator>
<hr/>
=====使用merge标签拼接的集合=====
<br/>
<s:merge var="names_merge">
    <s:param value="{'A','B','C','D','E'}"/>
    <s:param value="{'a','b','c','d','e'}"/>
</s:merge>
<s:iterator
    value="#names_merge"
    id="test_merge"
>
    <s:property value="test_merge"/>,
</s:iterator>
</body>
</html>

  使用append标签进行拼接后的结果为:A,B,C,D,E,a,b,c,d,e,

  使用merge标签进行拼接后的结果为:A,a,B,b,C,c,D,d,E,e,

6.subset标签

  subset标签用于取得集合的子集,该标签有如下几个属性:

  count:可选属性,指定子集元素的个数。

  source:可选属性,指定那个集合作为被取子集合的集合,默认取ValueStack栈顶的集合。

  start:可选属性,指定从第几个元素开始截取,默认为第一个元素,即start值为0。

  decider:可选属性,由开发者子集决定是否选中该元素,该属性必须指定一个Decider对象。

  var:可选属性,该属性将生成的Iterator对象设置成page属性范围。

  在subset标签内,所产生的子集合放在ValueStack的栈顶,该标签结束后,该子集合从ValueStack移除。

(1)使用标准的截取规则(不指定decider属性):

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>subset</title>
</head>
<body>
<!-- 使用subset标签,不指定decider属性 -->
截取源集合的5个元素,从第二个元素开始截取即start属性为1<hr/>
<s:subset
    source="{1,2,3,4,5,6,7,8,9,0}"
    start="1"
    count="5"
>
    <s:iterator>
        <s:property/>
    </s:iterator>
</s:subset><hr/>
</body>
</html>

(2)实现自己的截取规则(指定decider属性):

  1)写一个实现了Decider接口的类,当该类中的decide方法返回值为true时,此元素被放入子集合中

import org.apache.struts2.util.SubsetIteratorFilter.Decider;

public class DeciderTest implements Decider{

    @Override
    public boolean decide(Object arg0) throws Exception {
        String a = (String)arg0;
        if(a.equals("A")){
            return true;
        }else{
            return false;
        }
    }

}

  2)在subset标签中使用decider属性

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>subset - decider</title>
</head>
<body>
<!-- 定义一个Decider Bean -->
<s:bean name="myDecider.DeciderTest" var="deciderTest"/>
<s:subset
    source="{'A','B'}"
    decider="#deciderTest"
>
    <s:iterator>
        <s:property/>
    </s:iterator>
</s:subset>
</body>
</html>

7.sort标签

  sort标签用于对指定的集合进行排序,进行排序时必须要为其指定规则,,指定规则需要实现Comparator接口。

  sort标签有如下几个属性:

  comparator:必须属性,指定排序的Comparator实例。

  source:可选属性,指定被排序的集合,默认是ValueStack栈顶的集合。

  var:可选属性,设置该属性后,将生成的Iterator设置为page范围属性,不放入Stack Context中。

  在sort标签内时,其生成的子集合房子ValueStack栈顶,该标签结束后,该标签生成的子集合将会被移出ValueStack。

示例:

(1)必须要有一个类,这个类必须实现Comparator接口。

import java.util.Comparator;

public class ComparatorTest implements Comparator{

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

}

(2)使用sort标签。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>comparator test</title>
</head>
<body>
<!-- 创建一个Comparator实例 -->
<s:bean name="myComparator.ComparatorTest" var="mycomparator"/>
<s:sort
    comparator="#mycomparator"
    source="{'123','1234','','12'}"
    >
    <s:iterator>
        <s:property/>
    </s:iterator>
</s:sort>
</body>
</html>

Struts2的标签库(三)——控制标签的更多相关文章

  1. jstl---&gt;Core 核心标签库-&gt;流程控制

    jstl--->Core 核心标签库->流程控制 -->if.choose.when.otherwise  <c:if>条件判断 语法1:没有本体内容  <c:if ...

  2. JSTL标签库之核心标签

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...

  3. javaweb学习总结(二十八)——JSTL标签库之核心标签

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...

  4. javaWeb学习总结(9)- JSTL标签库之核心标签

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...

  5. 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

    学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签.  jsp标签的分 ...

  6. jsp的标签库和自定义标签

    1.jstl标签库 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. ...

  7. JavaWeb学习记录(十九)——jstl自定义标签库之传统标签

    一.传统标签 (1)JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法. public void setPageContext(PageCo ...

  8. JSTL标签库中fmt标签,日期,数字的格式化

    首先介绍日期的格式化:(不要嫌多哦) JSTL格式化日期(本地化) 类似于数字和货币格式化,本地化环境还会影响生成日期和时间的方式. <%@ page pageEncoding="UT ...

  9. Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

    前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. ...

  10. JSP标准标签库(JSTL)--XML标签库 x

    ³在开发中XML解析的操作是非常烦琐的,幸运的是在JSTL中专门提供了用于XML解析的操作,这样用户就可以不用费力的去研究SAX或DOM等操作的使用,就可以轻松的进行XML文件的解析处理.  XML标 ...

随机推荐

  1. 【Cocos2d-x for WP8 学习整理】(2)Cocos2d-Html5 游戏 《Fruit Attack》 WP8移植版 开源

    这一阵花了些时间,把 cocos2d-html5 里的sample 游戏<Fruit Attack>给移植到了WP8上来,目前已经实现了基本的功能,但是还有几个已知的bug,比如WP8只支 ...

  2. Spring注意事项(各部分理解)

    (1),每一个bean属性,就是一个普通的java类. 类有属性,有方法,如何交给容器管理.(注解的方式,xml方式配置) (2),通过Bean来实例化对象的方式 1.通过构造器(一般是无参的默认构造 ...

  3. ROS(Robot Operating System)常用环境变量介绍

    本文简单介绍ROS系统中常用的环境变量用途及设置方式.ROS系统环境中除了必须配置的环境变量以外,其他的也是十分有用,通过修改变量路径,可以设置ROS系统中log文件存放路径,单元测试结果存放路径等. ...

  4. [BZOJ1264][AHOI2006]Match(DP+树状数组)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1264 分析: 考虑做一般的LCS的时候,更新结果的条件是a[i]==b[j]时候 于是 ...

  5. java基础学习05(面向对象基础01--类实例分析)

    面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...

  6. Mysql:The table‘xxxx’is full

    下午跑程序,在插入mysql时突然报错: "The table'xxxx'is full" 而之前一直没问题的. 上网查了一下,都说临时表的问题,需要设置"tmp_tab ...

  7. hugo-最好用的静态网站生成器

    hugo最好用的静态网站生成器 Hugo是由Go语言实现的静态网站生成器.简单.易用.高效.易扩展.快速部署. 快速开始 安装Hugo 1. 二进制安装(推荐:简单.快速) 到 Hugo Releas ...

  8. OpenGL-选择与拾取

    转自:http://blog.sina.com.cn/s/blog_4a9aa55c0100vu57.html 以下内容主要整理<OpenGL编程指南>第13章的内容.主要解决以下问题: ...

  9. VS2015使用技巧 打开代码片段C#部分

    镇场诗: 大梦谁觉,水月中建博客.百千磨难,才知世事无常. 今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1. ...

  10. PHP字符串——编码与转义

    因为PHP程序经常与HTML页.Web地址(URL)以及数据库交互,所以PHP提供一些函数来帮助你处理这些类型的数据.HTML.Web页地址和数据库命令都是字符串,但是它们每个都要求不同的字符以不同的 ...