在早期的web开发中,jsp视图控制和显示技术主要依靠java脚本实现的,这样一来,jsp页面嵌入了大量的java脚本代码,维护起来极为困难。从jsp1.1规范后,JSP增加了自定义标签库的支持,标签库是一种组件技术,通过标签库,可以将复杂的java脚本代码封装在组件中,开发者只需要使用简单的java代码就可以实现复杂的java脚本功能,提高了开发者的开发效率。
Struts2标签库的分类
主要分为以下三类:
UI标签(用户界面标签):主要是用于生成HTML元素的标签,UI标签又可以分为表单标签(生成Form元素)和非表单标签(生成tree、tab页等)
非UI标签:主要用于数据访问,逻辑控制。 非UI标签可以分为流程控制标签(用于实现分支、循环等流程控制)和数据访问标签(主要包括用户输出ValueStack中的值,完成国际化等功能)
Ajax标签:用于支持Ajax效果
Struts2标签使用前的准备:
我们可以在struts2-core-2.1.8.1.jar压缩文件的META-INF目录下找到struts-tags.tld文件,这个文件定义了Struts2的标签。
(1) 要在jsp页面中使用Struts2标签,先要指明标志的引入。通过jsp代码的顶部加入以下的代码:
(2) 在web.xml中声明要使用的标签
Struts2标签的使用
控制标签
Struts2的非UI标签包括控制标签和数据标签,主要用于完成流程控制,以及对ValueStack的控制,数据标签主要用于访问ValueStack中的数据; 控制标签可以完成流程输出控制,例如分支、循环等的操作,也可以对集合的合并、排列等。
控制标签有:
1、if:用于控制选择器输出的标签;
2、else if: 与if标签结合使用,用于控制选择输出的标签;
3、else:与if标签结合使用,用于控制选择输出的标签;
4、append:将多个集合拼接成一个新的集合;
5、generator:字符解析器,用于将一个字符串解析成一个集合;
6、iterator:这是一个迭代器,用于将集合迭代输出;
7、merge:用于多个集合拼接陈一个新的集合。但与appernd的拼接方式有所不同。
8、sort:用于对集合进行排序;
9、Subset:截取集合的部分元素,形成新的子集;
If/elseif/else这三个标签都是用于进行分支控制的,他们都是用于根据一个Boolean表达式的值,来确定是否计算、输出标签体的内容。
Iterator标签:
用于对集合进行迭代,这里集合包含List、Set数组,也可对Map类型的对象进行迭代输出。Vlue、id、Status三个属性都是可选属性,如果没有指定value属性,则使用ValueStack栈顶的集合。
如果为标签指定status属性,即每次迭代时都会有一个IteratorStatus实例,该实例的方法有:
Int getCount():返回当前迭代了几个元素;
Int getIndex():返回当前元素的索引;
Boolean isEven(): 当前元素的索引是否是偶数;
Boolean isFirst():当前元素是否是第一个元素;
Boolean isLast():当前元素是否是最后一个元素;
Boolean isOdd():当前元素的索引是否是奇数;
Sort标签 指定集合元素进行排序,进行排序时是=时,必须提供自己的排序规则,即实现自己的comparetor,自己的Comparetor需要实现java.util.Comparetor接口,属性有:
.Comparetor:该属性指定进行排序的comparetor实例。
.Source:该属性指定排序的集合。如果不指定该属性,则对ValueStack栈顶的集合进行排序。
集合合并标签:append和merge,将多个集合合并成一个集合
注:merge属性和append相同,结果的组织不一样
字符串分割标签:generator,将一个字符串按照指定分隔符分割成一个字符串数组
数据标签
用于提供各种数据范文相关的功能,包含显示一个Action里的属性,以及生成国际化输出等功能。
设置变量标签 set
将一个值赋给指定范围内变量。Set标签在某些情况下比较有用,例如在页面中多次引用一个复杂的表达式,我们可以将这个表达式赋给一个变量,然后直接引用该变量,带来的好处:
提升了性能,
提供了代码的可读性
栈顶置值标签push
将某个值置于值栈的顶部,标签结束后,将从值栈中移除。
javabean创建标签bean
用于创建javabean的实例,如果设置了var值,则存于StackContext中,标签结束后自动移除.
资源包含标签include
用于将一个html、jsp或servlet包含到当前页面中,使用param传递参数
URL生成标签
生成URL地址,可以通过param标签传递请求参数,如果参数为中文,自动编码
数据输出标签property
用于输出值栈(Stack Context)中的对象的属性值,使用value指定要输出的值,如果输出值栈中的值,不用#,如果省略value,表示取出值栈的栈顶对象输出。
Ajax标签
需要在jsp页面中添加以下引用:
表单标签
表单标签的name和value属性,name属性除了为html表单元素指定名称之外,它还映射到action的属性。
在大多数情况下,name属性映射到一个简单的javaBean属性,例如,name属性为userName,在表单提交后,Struts2框架会调用Action的setUserName()方法来设置属性。 如果希望在表单元素中显示Action属性的数据,为value属性指定表达式"%",这时会调用Action的getUserName()方法,并在表单中显示返回的数据。 之后,可以编辑这个值,然后重新提交他。
form标签
通常情况下,当前输出表单的请求和提交表单的请求属于同一个命名空间。如果输出表单的请求和提交表单的请求属于不同的名称空间,可以通过namespace属性指定处理表单提交的action所属的名称空间。
如果通过action的一个非execute方法输出表单,然后将表单提交给action默认的execute方法执行,那么form标签的action属性可以忽略。
Method 和enctype是HTML form标签的属性
form标签的validate属性设为true,将自动生成客户端的JavaScript验证代码
textarea标签:输出一个HTML多行文本输入控件
reset标签: 输出一个重置的按钮,与form标签一起使用,用来提供表单的重置
………
e. 非表单标签
Struts2的非表单标签包括下列标签:component、 a、actionnerror、actionmessage、filederror
领取专属 10元无门槛券
私享最新 技术干货