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.doczj.com/doc/0018412779.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.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标签内部的
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标签中的
标签标识标准化规范
目录 一、概述 (3) 二、线缆标识 (4) 2.1、相关标准 (4) 2.2、规范要求 (5) 2.3、示例 (6) 三、配线架标识 ..................................................................................................... 错误!未定义书签。 3.1、相关标准 ................................................................................................ 错误!未定义书签。 3.2、规范要求 ................................................................................................ 错误!未定义书签。 3.3、示例 ........................................................................................................ 错误!未定义书签。 四、接合标识 ......................................................................................................... 错误!未定义书签。 4.1、相关标准 ................................................................................................ 错误!未定义书签。 4.2、规范要求 ................................................................................................ 错误!未定义书签。 4.3、示例 ........................................................................................................ 错误!未定义书签。 五、面板标识部分 ................................................................................................. 错误!未定义书签。 5.1、相关标准 ................................................................................................ 错误!未定义书签。 5.2、规范要求 ................................................................................................ 错误!未定义书签。 5.3、示例 ........................................................................................................ 错误!未定义书签。 六、资产管理标识 ................................................................................................. 错误!未定义书签。 6.1、规范要求 ................................................................................................ 错误!未定义书签。 七、安全标识 (15) 7.1、相关标准 (15) 7.1、规范要求 (19) 八、标识文档管理 (20) 8.1、相关标准 (20) 8.2、规范要求 (25) 8.3、示例 (26)
JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持。在概念上说,标签库是非常简单和可以重用的代码构造。 自定义标签有着丰富的特点,它们可以: 1.可以通过调用页面传递的属性进行自定义; 2.可以访问对于JSP页面可能的所有对象; 3.可以修改由调用页面产生的响应。 4.可以相互间通信。你可以创建并初始化一个JavaBean组件,创建一个变量引用标签中的bean,接着在其它的标签中引用该bean. 5.可以在一个标签中嵌套另一个,可以在JSP页面中进行复杂的交互。自定义标签为在JSP项目中创建易于重用的代码打开了一扇大门。你所需要的只是标签库和它的文档说明。 通过实现接口或者继承现有的类,我们就可以开发自定义的标签。常用的接口有:
TagSupport类 该类是IterationTag的缺省实现。除了实现原有方法外,本身还增加了一些有用的其他方法和成员变量。下表列出其中重要的几个:
BodyTagSupport类 该类同时继承了TagSupport类,并实现BodyTag接口。除了前表所示方法,该类还提供了一些其它方法便于使用。 实现Tag接口 所有的标签处理器都需要间接或直接的实现这个接口。 下面列出Tag接口定义的方法和常量:
setPageContext()方法 setPageContext()方法是一个定制标签声明周期内第一个要被调用的方法。完整写法是: public void setPageContext(PageContext); jsp引擎会将jsp页转换时隐含创建的pageContext对象,作为参数,调用setPageContext方法。 通常的做法会将这个参数保存为本标记处理器的参数。 setParent()和getParent()方法 当标签嵌套使用时,外层的标签被成为父标签,内部的被称为子标签。完整的写法是: public void setParent(Tag); public Tag getParent(); 其中setParent方法对父标签对象进行设置。而getParent方法用以获得父标签对象。
普通卷动 滑动 预设卷动 来回卷动 向下卷动 向上卷动 向右卷动 向左卷动 卷动次数 设定宽度 设定高度 设定背景颜色 设定滚动速度 设定卷动时间 鼠标经过上面时停止滚动鼠标离开时开始滚动 字体效果
1.OGNL表达式语言 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts 2框架使用OGNL作为默认的表达式语言。 相对EL表达式,它提供了平时我们需要的一些功能,如: 支持对象方法调用,如xxx.sayHello(); 支持类静态方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@https://www.doczj.com/doc/0018412779.html,ng.String@format('foo %s', 'bar')或 @cn.itcast.Constant@APP_NAME; 操作集合对象。 Ognl 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map接口,在Struts2中上下文(Context)的实现为ActionContext,下面是上下文(Context)的结构示意图 2.访问上下文(Context)中的对象需要使用#符号标注命名空间,如 #application、#session 另外OGNL会设定一个根对象(root对象),在Struts2中根对象就是ValueStack (值栈)。如果要访问根对象(即ValueStack)中对象的属性,则可以省略#命名空间,直接访问该对象的属性即可。 在struts2中,根对象ValueStack的实现类为OgnlValueStack,该对象不是我们想像的只存放单个值,而是存放一组对象。在OgnlValueStack类里有一个List 类型的root变量,就是使用他存放一组对象 |--request |--application context ------|--OgnlValueStack root变量[action, OgnlUtil, ... ] |--session |--attr |--parameters 在root变量中处于第一位的对象叫栈顶对象。通常我们在OGNL表达式里直接写上属性的名称即可访问root变量里对象的属性,搜索顺序是从栈顶对象开始寻找,如果栈顶对象不存在该属性,就会从第二个对象寻找,如果没有找到就从第三个对象寻找,依次往下访问,直到找到为止。 大家注意: Struts2中,OGNL表达式需要配合Struts标签才可以使用。如: