当前位置:文档之家› 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()可以这样写:。

1.1 OGNL的常用符号主要是#号,其作用有三种:1. 访问OGNL上下文与ActionContext资源,相当于ActionContext.getContext(),常用#属性如下表:<!-- 返回Http请求中的参数 --><p>parameters: <s:property value="#erName" /></p>相当于:request.getParameter("userName");<!-- 返回request中的属性 --><s:property value="#erName" />相当于:request.getAttribute("userName");<!-- 返回Session中的属性 --><s:property value="#erName" />相当于:session.getAttribute("userName");<!-- 返回Application中的属性 --><s:property value="#erName" />相当于:application.getAttribute("userName");<s:property value="#erName" />2.用于过滤或筛选集合例如:books.{?#this.price<20},表示所有的price<20的书。

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

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

<s:iterator value="books.{?#this.price < 20}"><li><s:property value="title" />- $<s:property value="price" /></li> </s:iterator>以上代码的含义是:当books对象中的某个元素中的属性price大于35时,就输出。

其中title和price分别是books对象中的变量(实例域)。

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

private String isbn;private String title;private double price;books是一个泛型列表集合,其本例中的泛型类型是Book,其创建如下:private List<Book> books= new LinkedList<Book>();其数据的装入如下:books.add(new Book("978-0735619678", "Code Complete, Second Edition", 32.99));3.构造Map<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />以上代码构造一个Map对象。

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

<s:property value="#foobar['foo1']" />以上代码可以访问一个Map对象中的键。

综合实例:StrutsTagDemo01在地址栏输入:http://localhost:8080/StrutsTagDemo01/ognl.action?id=1&id=2&id=31.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() ..........................最后一个元素<struts:iterator value="magazineList.{?#this.price>18}"><struts:property value="name" /> - ¥<struts:property value="price" />. <br/> </struts:iterator>2. if、elseif、else标签控制流程Struts2的判断标签有3个:<struts:if> <struts:elseif> <struts:else>其右if标签与else标签都有test属性示例:IfAction.java ifTag.jsp3. append标签连接多个Listappend标签用于将多个集合对象拼接起来,组成一个新的集合。

从而允许通过一个<s:iterator.../>标签完成多个集合的迭代。

示例:AppendAction.java appendTag.jsp地址栏输入:http://localhost:8080/StrutsTagDemo02/Append.action4. merge标签取集合的并集merge标签类似于append标签,能将两个List连接成一个List。

它们的用法完全一致。

不同的是,append标签是先添加集合1所有元素,再添加集合2所有元素;而merge是先添加集合1第1个元素,再添加集合2第1个元素,再添加集合1第2个元素,再添加集合2第2个元素。

示例:AppendAction.java、mergeTag.jsphttp://localhost:8080/StrutsTagDemo02/Append.action5.subset标签subset标签用于筛选集合里的元素,取得集合的子集。

它使用一个Filter,将不合格的元素过滤掉,剩下原集合的一个子集。

subset需要使用decider属性,decider是个过滤器,必须实现SubsetIteratorFilter.Decider接口以及decide方法。

示例:SubsetAction.java、subsetTag.jsp在地址栏输入:http://localhost:8080/StrutsTagDemo02/Subset6.generator标签generator标签用于将字符串转化为List,相当于Java的split常用属性:count:该属性是一个可选的属性,该属性指定生成集合中元素的总数。

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

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

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

示例:generatorTag.jsp1.3 数据标签以下标签示例均在StrutsTagDemo02项目中。

1. action标签该标签用于在JSP页面中直接调用Action,并将结果包含进来,相当于JSP中的include,因为需要调用Action,故可以指定需要被调用Action的name及namespace。

如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图资源)包含到本页面中来。

相关主题