细谈Struts2框架(四)Struts2框架之标签库

在早期的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代码的顶部加入以下的代码:

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

(2) 在web.xml中声明要使用的标签

 

<filter>

 <filter-name>struts2</filter-name>

 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

 </filter>


Struts2标签的使用


a. 控制标签

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栈顶的集合。

例如:

<s:iteratorvalue="#roleList">                

<trclass="TableDetail1 template">

<td>${name} </td>

<td>${description} </td>

<td>

<s:aaction="role_delete?id=%{id}" οnclick="returnconfirm('确定要删除吗?')">删除</s:a>

<s:aaction="role_editUI?id=%{id}">修改</s:a>

<s:aaction="role_setPrivilegeUI?id=%{id}">设置权限</s:a>

</td>

</tr>

</s:iterator>
 

如果为<s:iterator>标签指定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,将一个字符串按照指定分隔符分割成一个字符串数组


 b. 数据标签

用于提供各种数据范文相关的功能,包含显示一个Action里的属性,以及生成国际化输出等功能。

  1. 设置变量标签 set

将一个值赋给指定范围内变量。Set标签在某些情况下比较有用,例如在页面中多次引用一个复杂的表达式,我们可以将这个表达式赋给一个变量,然后直接引用该变量,带来的好处:

  1. 提升了性能,
  2. 提供了代码的可读性
  1. 栈顶置值标签push

将某个值置于值栈的顶部,标签结束后,将从值栈中移除。

  1. javabean创建标签bean

用于创建javabean的实例,如果设置了var值,则存于StackContext中,标签结束后自动移除

例如:

<s:beanname="com.aptech.entity.Student"var="stu">

<s:paramname="sid">1</s:param>

<s:paramname="sname">张三</s:param>

<s:paramname="sbirthday">2009-9-9</s:param>

</s:bean>

  1. 资源包含标签include

用于将一个html、jsp或servlet包含到当前页面中,使用param传递参数

  1. URL生成标签

生成URL地址,可以通过param标签传递请求参数,如果参数为中文,自动编码

  1. 数据输出标签property

用于输出值栈(Stack Context)中的对象的属性值,使用value指定要输出的值,如果输出值栈中的值,不用#,如果省略value,表示取出值栈的栈顶对象输出。

 

c. Ajax标签

需要在jsp页面中添加以下引用:

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


d. 表单标签


表单标签的name和value属性,name属性除了为html表单元素指定名称之外,它还映射到action的属性。

在大多数情况下,name属性映射到一个简单的javaBean属性,例如,name属性为userName,在表单提交后,Struts2框架会调用Action的setUserName()方法来设置属性。 如果希望在表单元素中显示Action属性的数据,为value属性指定表达式"%{userName}",这时会调用Action的getUserName()方法,并在表单中显示返回的数据。 之后,可以编辑这个值,然后重新提交他。

 form标签

  1. 通常情况下,当前输出表单的请求和提交表单的请求属于同一个命名空间,例如请求:/ItcastOAsys/user_loginUI.action输出的表单,命名空间会被假设为ItcastOAsys,因此在使用form标签时,可以不使用namespace属性,如下:

<s:formaction="user_login" focusElement="loginNameInput">

</s:form>

如果输出表单的请求和提交表单的请求属于不同的名称空间,可以通过namespace属性指定处理表单提交的action所属的名称空间。

  1. 如果通过action的一个非execute方法输出表单,然后将表单提交给action默认的execute方法执行,那么form标签的action属性可以忽略。
  2. Method 和enctype是HTML form标签的属性
  3. form标签的validate属性设为true,将自动生成客户端的JavaScript验证代码

textarea标签:输出一个HTML多行文本输入控件

reset标签: 输出一个重置的按钮,与form标签一起使用,用来提供表单的重置

………

e. 非表单标签

Struts2的非表单标签包括下列标签:component、 a、actionnerror、actionmessage、filederror


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章