文档库 最新最全的文档下载
当前位置:文档库 › Strus2标签库

Strus2标签库

Strus2标签库
Strus2标签库

Strus2标签库

Struts2提供了一套标签库用于简化JSP层的编程,开发者只需要标签中做少量的设置,就可以实现各种常用的效果。Struts2的标签与Action联系比较紧密,使用标签后,Struts会自动完成JSP层的显示数据、在Action层采集数据等工作。

Struts2的标签都统一包含在struts-tags.tld文件中(位于struts2-core-2.2.1.jar中),使用统一前缀。

Struts标签库大致分为:

UI标签:包括表单标签,非表单标签

非UI标签:流程控制标签,数据访问标签

首先要在JSP中使用taglib编译指令导入标签库,然后才可以使用标签。

<%@taglib prefix="s" uri="/struts-tags"%>

以上代码用于导入Struts2标签库,其中URI就是对应web.xml文件中指定的标签库的URI,而prefix属性值是该标签库的前缀。

第1节OGNL语言

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

OGNL语法类似于EL,主要使用.作为操作符,例如要访问person.getCountry().getName()可以这样写:https://www.wendangku.net/doc/0918412779.html,。

1.1 OGNL的常用符号

主要是#号,其作用有三种:

1. 访问OGNL上下文与ActionContext资源,相当于ActionContext.getContext(),

常用#属性如下表:

parameters:

相当于:request.getParameter("userName");

相当于:request.getAttribute("userName");

相当于:session.getAttribute("userName");

相当于:application.getAttribute("userName");

2.用于过滤或筛选集合

例如:books.{?#this.price<20},表示所有的price<20的书。

“?”:取出所有符合选择逻辑的元素。

以上代码中,直接在集合后紧跟.{}运算符表明用于取该集合的子集,在{}内使用?表明取出所有符合选择逻辑的元素,而#this代表集合里的元素。

  • - $
  • 以上代码的含义是:当books对象中的某个元素中的属性price大于35时,就输出。其中title和price分别是books对象中的变量(实例域)。

    Book是一个POJO,其中包括如下变量和其get/set方法。

    private String isbn;

    private String title;

    private double price;

    books是一个泛型列表集合,其本例中的泛型类型是Book,其创建如下:

    private List books= new LinkedList();

    其数据的装入如下:

    books.add(new Book("978-0735619678", "Code Complete, Second Edition", 32.99));

    3.构造Map

    以上代码构造一个Map对象。对象名为foobar,其中的值为键值对,foo1="bar1",foo2=bar2;当要构造一个List对象的时候,则不需要“#”。

    以上代码可以访问一个Map对象中的键。

    综合实例:StrutsTagDemo01

    在地址栏输入:

    http://localhost:8080/StrutsTagDemo01/ognl.action?id=1&id=2&id=3

    1.2 控制标签

    以下标签示例均在StrutsTagDemo02项目中。

    1. iterator标签遍历集合

    iterator标签用于遍历集合(包括List、Set、Map)、数组等。可以使用OGNL表达式对数据进行过滤。

    可以指定如下3个属性:

    value:这是一个可选的属性,value属性指定的就是被迭代的集合,被迭代的集合通常都使用OGNL表达式指定。

    id:这是一个可选的属性,该属性里指定了集合里元素的ID。

    status:这是一个可选的属性,该属性指定迭代时的IteratorStatus实例,通过该实例即可判断当前迭代元素的属性。例如是否是最后一个,以及当前迭代元素的索引等。

    如果为该标签指定了status属性,即每次迭代时都会有一个IteratorStatus实例,该实例包括如下几个方法:

    int getCount() 返回当前迭代了几个元素

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

    boolean isEven() 返回当前被迭代的元素的索引是否是偶数

    boolean isOdd() ................................奇数

    boolean isFirst() 返回当前被迭代的元素是否是第一个元素

    boolean isLast() ..........................最后一个元素

    - ¥.

    2. if、elseif、else标签控制流程

    Struts2的判断标签有3个:

    其右if标签与else标签都有test属性

    示例:IfAction.java ifTag.jsp

    3. append标签连接多个List

    append标签用于将多个集合对象拼接起来,组成一个新的集合。从而允许通过一个标签完成多个集合的迭代。

    示例:AppendAction.java appendTag.jsp

    地址栏输入:

    http://localhost:8080/StrutsTagDemo02/Append.action

    4. merge标签取集合的并集

    merge标签类似于append标签,能将两个List连接成一个List。它们的用法完全一致。不同的是,append标签是先添加集合1所有元素,再添加集合2所有元素;而merge是先添加集合1第1个元素,再添加集合2第1个元素,再添加集合1第2个元素,再添加集合2第2个元素。示例:AppendAction.java、mergeTag.jsp

    http://localhost:8080/StrutsTagDemo02/Append.action

    5.subset标签

    subset标签用于筛选集合里的元素,取得集合的子集。它使用一个Filter,将不合格的元素过滤掉,剩下原集合的一个子集。

    subset需要使用decider属性,decider是个过滤器,必须实现

    SubsetIteratorFilter.Decider接口以及decide方法。

    示例:SubsetAction.java、subsetTag.jsp

    在地址栏输入:

    http://localhost:8080/StrutsTagDemo02/Subset

    6.generator标签

    generator标签用于将字符串转化为List,相当于Java的split

    常用属性:

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

    separator:这是一个必填的属性,该属性指定用于解析字符串的分隔符。

    val:这是一个必填的属性,该属性指定被解析的字符串。

    converter:可选属性,指定了一个转换器,负责将集合中的每个字符串转换成对象。

    示例:generatorTag.jsp

    1.3 数据标签

    以下标签示例均在StrutsTagDemo02项目中。

    1. action标签

    该标签用于在JSP页面中直接调用Action,并将结果包含进来,相当于JSP中的include,因为需要调用Action,故可以指定需要被调用Action的name及namespace。如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图资源)包含到本页面中来。

    该标签有如下属性:

    id:可选属性,该属性将会作为该Action的引用ID。

    name:必填属性,通过该属性指定该标签调用哪个Action。

    namespace:可选属性,指定该标签调用的Action所在的namespace。

    executeResult:可选属性,指定是否要将Action的处理结果页面包含到本页面。默认为false,即不包含。

    ignoreContextParams:这是一个可选参数,它指定该页面中的请求参数是否需要传入调用的Action。默认为false,即将本页面的请求参数传入被调用的Action。

    示例:actionTag.jsp、

    若在地址栏输入:

    http://localhost:8080/StrutsTagDemo02/actionTag.jsp?account=admin

    则将account参数值admin传递到了名为login的Action中。

    2 . bean标签

    bean标签用于引用某个JavaBean,以便访问其getter/setter方法。

    bean标签内部的会通过setter方法把字符串set到name属性上,会调用name属性的getter方法输出属性的值。

    beanTag.jsp

    示例:beanTag.jsp

    3. date标签

    date标签用于格式化日期输出,属性format设置时间格式字符串,例如yyyy-MM-DD,HH:mm:ss等。format支持JDK中的日期格式。

    date标签还有一个nice属性,默认为false。如果nice为true,会输出形如20days、6 hours ago、in 10 minutes等时间格式,此时format 属性不起作用。

    dateTag.jsp



    示例:dateTag.jsp

    4 . include标签

    用于包含一个JSP页面(或Servlet),将JSP的执行结果包含到本页面内,相当于JSP行为里的

    使用该标签有如下两个属性:

    value:必填属性,该属性指定需要被包含的JSP页面,或者Servlet。

    id:可选属性,该属性指定该标签的id引用。

    示例:includeTag.jsp

    5. param标签

    用于给其他标签传参数

    该标签可以接受如下参数:

    name:可选属性,指定需要设置参数的参数名。

    value:可选属性,指定需要设置参数的参数值。

    id:可选属性,指定引用该元素的id。

    6. set标签

    用于定义一个变量,并设置变量的值

    7 . property标签

    用于输出一个变量或者变量的属性,也可以直接输出当前Action的属性

    第2节表单标签

    表单标签是Struts2标签库的核心,用入输入和提交数据。

    表单UI标签名以及功能如下:

    form:表单标签,同HTML标签中的

    textfield:单行文本标签,同HTML标签中的

    textarea:文本域标签,同HTML标签中的