Struts 2标签库概述
struts 2标签其实就是由Java类生成的基于XML脚本的方法。一个Struts 2标签代表着一系列复杂的Java代码,这些代码实现了该标签的功能。
所以一个Struts 2标签也可以看做是一个可以重用的功能模块的入口,标签的参数也是功能模块的参数。Struts 2标签的使用极大地减少了JSP
文件中Java脚本的使用量,使代码简洁而又功能强大。大量的标签可以组成一个标签库,一旦建立一个标签库,就可以在多个项目中使用它进行
视图开发,标签库具有很强的通用性和重用性。
Struts 2标签库大致可以分为两类,如下所述:
用户界面标签:这类标签主要用来生成HTML元素。
非用户界面标签:这类标签主要用来进行数据访问、逻辑控制等。
其中界面标签又可以分为以下几种。
表单标签:该标签主要用来生成HTML页面的Form元素,以及普通的表单元素。
非表单标签:该标签主要用来生成页面上的tree、tab等。
其中非界面标签又可以分为以下几种。
数据访问标签:主要包含用于输出堆栈(ValueStack)中的值、完成国际化等功能的标签。
流程控制标签:该标签主要用于实现分支、循环等流程控制等。
Struts 2控制标签
循环标签iterator
iterator标签主要用来对集合属性进行遍历输出,其中的集合属性可能是List,Map或者是数值。
在使用<s:iterator>标签进行输出时,常用的标签属性如下所述。
id:指定了集合的id
value:该属性指定即将进行遍历的集合对象。
status:该属性用来代表一个遍历时的IteratorStatus实例,该实例即当前被遍历到的集合的元素。
IteratorStatus常用的方法有以下几个:
int getIndex():返回当前被遍历元素的索引值。
int getCount():返回已经遍历元素的总数。
boolean isEven():判断当前迭代元素是否为偶数。
boolean isOdd():判断当前迭代元素是否为奇数。
boolean isFirst():判断当前迭代元素是否为集合中第一个元素。
boolean isLast():判断当前迭代元素是否为集合中最后一个元素。
选择标签if/elseif/else
该标签主要用来控制流程分支,同Java的流程控制相似,都是用一个boolean类型的表达式的值判断是否进行相关的操作,其格式
如下:
<s: if test="">
...
<s: if>
<s: elseif test="">
...
<s: else>
...
</s: else>
上面3个标签中test属性必须设置,它是一个boolean类型的表达式,如果test的值为true,则进行下面的操作。
集合连接标签append
append标签用于将多个集合对象连接在一起,从而组成一个新的集合。一般来说,这样拼接的目的就是为了使用iterator标签遍历新的
集合。
id:用来指定拼接后生成对象的Id。这样在使用iterator遍历时就可以通过value引用到该对象。
<s:param />:用来指定要拼接的子对象。
子集标签subset
该标签用于获取某个集合的子集合,该标签的常用属性有以下几种。
id:指定了集合元素的ID
source:指定源集合的名字,为一个字符串。
start:为一个Integer类型,指定子集合从源集合的哪个元素开始获取,默认为0,即从第一个元素开始获取。
count:为一个Integer类型的值,指定子集合从源集合获取元素的个数,默认为从start开始直到结尾。
排序标签sort
该标签用来对指定的集合进行排序,开发者需要指定自己的排序规则。如果要实现自己的规则,只需要实现Java.util.Comparator接口即可。
该标签的常用属性有以下几种:
id:指定了集合元素的ID。
comparator:必填属性,为一个Comparator类型,用于指定用户自定义的Comparator实例。
source:可选属性,为一个String类型值,用来指定被排序的集合名。如果不指定该值,则默认对值栈的栈顶集合进行排序。
使用sort标签必须指定comparator属性,如果用户需要开发自己的comparator,只需要实现Java.util.Comparator接口并重写compare()方法
即可。
数据标签
action标签允许程序员在JSP页面中直接调用struts.xml中配置的Action类。在JSP文件中,可以通过action标签的属性引用Action的name和
namespace,从而实现调用。并且可以显示调用的结果。
使用<s:action>标签调用Action类,action标签的属性如下所述。
name:指定了struts.xml文件中的业务控制器的名字,表示调用的是该控制器。
executeResult:指定了是否指向所调用Action的result,如果为true,将会显示result结果;否则不显示。
ignoreContextParams:用来指定是否将当前页面中的请求参数传入调用的Action。默认为false,即传递请求参数到Action类。
JavaBean调用标签bean
该标签用于创建一个JavaBean实例,在JSP视图中可以通过<s:bean/>标签去创建多个JavaBean类的实例,通过<param.../>参数给该实例的
属性赋值,然后在JSP文件中使用该实例。
值栈置顶标签push
该标签用来把一个值保存在值栈的栈顶,这样可以方便访问。
调试标签debug
debug标签主要用来进行调试,是Struts 2为了调试提供的一个辅助功能。该标签可以在页面上生成一个超链接,单击该链接可以查看Stack
Context中的内容。
包含标签include
include标签和JSP标签库中的include标签类似,使用它可以把其他的静态页面、JSP页面、Servlet包含到当前的页面中。该标签的value属性
指定了被包含文件的名字,<param>标签用来给这个页面传入一些参数。
参数传递标签param
该标签一般在其他标签的内部使用,用来给其他的标签传递参数。
name:用于指定参数的名字。
value:用于设置参数值,该属性为一个Object类型。
变量赋值标签set
该标签用于在指定的范围内给一个变量设置一个值。该标签主要有以下属性。
name:必填属性,用于设置变量的名称。
value:可选属性,用于指定变量的值。
scope:可选属性,用于指定变量的有效范围,可以是application,session,request、page或者action。如果没有指定,则该变量被放入
StackContext中。
地址标签url
该标签用来生成URL地址,主要有以下属性。
action:用来指定要访问的Action类的名字,如果没有设置该属性,可以使用value作为URL的地址。
value:用来指定生成的URL地址,如果没有设置该属性,可以使用action声明该URL地址。
includeParams:可选属性,用来声明是否包含请求参数,其值只能为none、all或者get。
namespace:可选属性,用来指定Action类的方法。
method:可选属性,用来指定Action类的方法。
encode:可选属性,用来指定是否需要encode请求参数。
值输出标签property
该标签用来输出指定的值,它在JSP文件中经常被使用。该标签的属性如下所述。
default:可选属性,如果输出的属性值为null,则用default的值去代替。
escape:可选属性,用来指定是否escape HTML代码。
value:可选属性,用来指定需要输出的值,如果没有指定其属性,则输出值栈栈顶的属性值。
表单标签
Struts 2的用户界面标签可以分为表单标签和非表单标签,表单标签在实际开发中用的非常广泛,通过使用它,可以进行用户数据的输入
和用户交互等操作。Struts 2的表单标签有个公共父类UIBean,在Struts 2的源代码中可以找到这个类,目录为
src\core\src\main\Java\org\apache\Struts2\components。所以,所有的表单标签从该父类继承了一些公共的属性,可以简单地分为以下
3类。
模板相关属性:这些属性主要用来指定表单使用的模板和主题。
JavaScript相关属性:主要用来在客户端浏览器和用户交互的一些属性。
通用属性:这些属性是所有的表单要素都有的注入名称、label、值、标题、是否必填等。
复选框标签checkbox
复选框集合标签checkboxlist
组合框标签combobox
日期选择标签datetimepicker
下拉列表框标签select
单选框标签radio
选项组标签optgroup
其他常用表单标签
1.文本区域标签textarea
2.密码标签password
3.输入框标签textfield
非表单标签
信息显示标签actionerror和actionmessage
这两个标签都用来输出Action类对应方法产生的信息,actionerror用来输出Action类中getActionErrors()方法返回的信息,actionmessage用来输出
Action类getActionMessage()方法返回的信息。这两个方法都是ActionSupport类提供的,用户不需要在Action类中调用它们,只需要通过
addActionErrors和addActionMessages()方法将信息添加到ActionContext中,再调用这两个标签去显示即可。
树形结构标签tree和treenode
tree标签用来生成一个树形结构,而treenode用来生成该树形结构的一个节点,这两个标签要放在一起使用,它们的主要属性及说明如下所述:
id:用来指定标签的ID值。
title:作用类似label,用来指定树形结构的标签。
rootNode:用来指定树形结构的基点。
nodeIdProperty:用来指定树形结构节点的title属性。
childCollectionProperty:用来指定树形结构节点的所有子节点。