第五章:struts2标签库

更新时间:2023-08-14 13:31:01 阅读量: 人文社科 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

IBM Software Group

®

IBM Software Group

第五章:Struts 2标签库主讲:刘雷

© 2008 IBM Corporation

IBM Software Group

学习目标 Struts2标签库概述 Struts2数据标签 Struts2控制标签 Struts2表单标签 Struts2非表单标签

IBM Software Group

IBM Software Group

Struts2标签库概述 Struts2标签库的组成 Struts2框架的标签库可以分为以下三类: 用户界面标签(UI标签):主要用来生成HTML元素的标签。 表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。 非表单标签:主要用于生成页面上的tree,Tab页等。 非用户界面标签(非UI标签):主要用于数据访问,逻辑控制。 数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能 的标签。 流程控制标签:主要包含用于实现分支,循环等流程控制的标签。 AJAX标签:用于支持Ajax效果

IBM Software Group

IBM Software Group

Struts2标签库 在早期的WEB开发中,JSP视图控制和显示技术主要依靠Java脚本来实现,这样一来 ,JSP页面重新嵌入了大量的Java脚本代码,给开发带来了极大的不方便。 从JSP1.1规范后,JSP增加了自定义标签库的支持。标签库是一种组件技术,通过标 签库,可以将复杂的Java脚本代码封装在组件中,开发者只需要使用简单的代码就可 以实现复杂的Java脚本功能。提供了Java脚本的复用性,提高了开发者的开发效率。 Struts2标签库相对struts1.x进行了巨大的改进,支持OGNL表达式,不再依赖任何表现 层技术。

IBM Software Group

IBM Software Group

Struts2标签的使用 我们可以在struts2-core-2.0.11.jar压缩文件的META-INF目录下找到struts-tags.tld文件 ,这个文件里定义了Struts2的标签。 要在jsp中使用Struts2的标志,先要指明标志的引入。通过jsp的代码的顶部加入以下的 代码: <%@taglib prefix="s" uri="/struts-tags" %>

IBM Software Group

IBM Software Group

Struts2标签语法(一) Struts2的标签都支持动态数据的访问,标签的属性都可以使用OGNL表达式,struts2标签的 IBM Software Group 属性具有类型,这些类型可以简单地分为字符串类型和非字符串类型,对于字符串类型的属 性,如果要访问动态数据,需要使用%{… }这样的语法, 例如:<s:include value=“%{ url }” /> Include标签的value属性是字符串类型,Struts2将对这个属性进行解析,查找符合%{…}样式 的字符串,然后将花括号之间的内容作为OGNL表达式进行求值。如果属性中没有%{…}样式 的字符串,那么属性的值将被直接看成是字符串数据。 例如:<s:include value=“urlTag.action” /> 对于非字符串类型的属性值,将直接作为OGNL表达式进行求值。 例

如:<s:property value=“username”/>

property标签的value属性是Object类型,它的值username将作为OGNL表达式进行求值,结 果是值栈中位于栈顶的对象的username属性的值。如果要为非字符串类型的属性直接指定字 符串数据,那么需要使用OGNL中的字符串常量,即用单引号(‘)或双引号(“)将字符 串括起来。 例如:<s:property value=“ zhangsan ”/> value属性的值‘zhangsan 作为字符串常量,计算结果就是zhangsan,因此输出zhangsan 。

IBM Software Group

Struts2标签语法(二) 除上述用法之外,也可以使用%{…}这样的语法来指定字符串常量。 例如: <s:property value=“%{ zhangsan }”/> 在这种情况下,%{ }将被忽略,花括号中的内容将作为表达式被计算。 总结一下,struts2标签的属性按照下列的三个规则进行计算。 (1)所有的字符串属性类型都会解析“%{…}”这样的语法。 (2)所有的非字符属性类型都不会被解析,而是直接被看作一个OGNL表达式进行求值 (3)对于第二个规则的例外情况是,如果非字符串属性使用了“%{…}”语法,那么 %{…}将被忽略,花括号中的内容将作为表达式计算。 如果大家在使用标签时, 忘记了某个属性是字符串类型,还是非字符串类型,那么有一 个简单的方法,那就是不考虑它是什么类型,统一使用“%{…}”语法。

IBM Software Group

IBM Software Group

Struts2通用标签 Struts2中通用标签可以分为二类:控制标签和数据标签。控制标签用于呈现页面时控 制执行流程,数据标签用于访问值栈中的数据。 数据标签:用于访问ActionContext和值栈中的数据。数据标签包括: property set push param bean action include url a i18n text date debug 控制标签:用于在呈现结果页面时控制程序的执行流程,根据程序执行的状态输出不 同的结果,控制标签包括下列标签: if/elseif/else iterator append merge generator subset sort

IBM Software Group

IBM Software Group

数据标签-----property标签 property标签用于输出值栈中的对象的属性(property)值,使用value属性来指定要输出 的对象属性,如果没有指定value属性,那么默认输出栈顶对象。

IBM Software Group

property标签属性

在前面的章节中,我们已经使用过了property标签,我们再看一个例子: <s:property value=“username” default=“游客” /> 取出栈顶对象(通常是action)的username属性并输出,如果没有找到username属性, 那么输出”游客”。

IBM Software Group

数据标签-----set标签 Set标签将一个值赋给指定范围内变量。Set标签在某些情况下是比较有用的,例如在 页面中多次引用一个复杂的表达式,我们可以将这个表

达式赋给一个变量,然后直接 引用变量。带来的好处就是: 提升了性能(表达式的计算只有一次) 提高了代码的可读性。 set标签属性

IBM Software Group

Set标签以name属性的值作为键(key),将value属性的值保存到指定的范围对象中。属 性scope取值中的page,request,session,application同JSP的4种范围,如果指定了 action范围(默认值),value属性的值将被同时保存到request范围和OgnlContext中。

IBM Software Group

IBM Software Group示例:访问地址:http://localhost:8080/.../setTag.action

IBM Software Group

数据标签-----push标签 push标签用于把一个值压入值栈(位于栈顶),注意和set标签的区别,set标签是将值放 到action上下文中。当push标签结束后,push标签放入值栈中的对象将被删除,换句 话说,要访问push标签压入栈中的对象,需要在标签内部去访问。 push标签的属性

IBM Software Group

public class User { private String username; private String email; private String sex; 省略set/get方法 }

IBM Software Group

Push标签示例IBM Software Group

访问:http://localhost:8080/...../pushTag.action

IBM Software Group

数据标签-----param标签 param标签被用作其他标签的子标签,用于为其他标签提供参数,例如:为bean标签 和include标签提供参数。 param标签的属性

IBM Software Group

当使用param标签时, 参数的值可以通过value属性给出,也可以在标签体中给出(开始标 签和结束标签之间的文本)。这二种用法有一些区别。我们看下面的例子: <param name=“color”>blue</param> <!-- (1) --> <param name=“color” value=“blue” /> <!-- (2) --> 在第(1)种情形中,参数值将作为ng.String对象(即字符串)被放入栈中; 在第(2)种情形中,参数值将作为表达式进行计算,如果blue不存在,则color参数的值为 null。 在第(1)种情形中,要为color指定字符串值,可以写为: <param name=“color” value=“ blue ”/>或者<param name=“color” value=“%{ blue }“/> 使用单引号包围字符串,表明这是一个字符串常量

IBM Software Group

数据标签-----bean标签 bean标签用于实例化一个JavaBean对象(必须遵照JavaBean规范),bean标签的标签 体内可以包含多个param标签,用于设置Bean的属性(必须有相应的setter方法)。如果 指定了id属性,则创建的Bean实例将被放入到OgnlContext中。 bean标签的属性

IBM Software Group

注意: id属性是可选的,无论是否指定id属性,bean标签创建的JavaBean实例都会被压入到 值栈的顶部,在bean标签内部可以直接访问创建的对象,无须使用”#”标记,当bean标 签结束的时候,bean标签创建的实例将从值栈中删除。 如果指定了id属性,那么bean标签创建

的JavaBean实例还将被放到OgnlContext中, 这样在bean标签的外部,也可以访问创建的对象了,不过此时就要使用”#”标记了。

IBM Software Group

bean标签示例IBM Software Group

IBM Software Group

bean标签示例说明 在没有指定id属性的情况下,创建的User对象只被压入值栈,在bean标签的内部使用 property标签可以直接访问User对象的属性。在bean标签外部,由于值栈中的User对 象已被删除,所以无法访问到User对象的属性了。 在指定了id属性的情况下,创建的User对象除了被放到值栈中外,还被放到action上下 文中,因此在标签的内部和外部都可以访问User对象属性,只不过在标签外部访问时 需要添加#user前缀, 访问路径:http://localhost:8080/..../beanTag.action

IBM Software Group

IBM Software Group

数据标签-----action标签IBM Software Group 通过指定action的名字和可选的名称空间,action标签允许你在JSP中直接调用action。 如果将标签的excuteResult属性设为true,那么action对应的结果输出也将被包含到本页 面中。 在action标签的标签体中可以嵌套param标签,向action传递参数。 action标签的属性

如果指定了id属性,则action将被放到OgnlContext中,在action标签结束后,可以通过 #id来引用action.

IBM Software Group

ActionTagAction.javaIBM Software Group

actionTagSuccess.jsp

IBM Software Group

actionTag.jspIBM Software Group

IBM Software Group

示例说明 在第一个action标签调用中,执行了结果,但没有设置ActiontagAction的username和 email属性,所以结果页面中的这两项输出为空。 在第二个action标签调用中,不执行结果,调用ActionTagAction的doDefault()方法,在 这个方法中,我们在请求对象中设置了greeting属性,在页面中使用property标签,通 过表达式#attr.greeting来获取greeting属性。 在第三个action标签调用中,执行了结果,并通过param标签设置了ActionTagAction的 username和email属性,在结果页面中通过property标签输出这两个属性的值。 访问路径:http://localhost:8080/....actionTag.jsp

IBM Software Group

本文来源:https://www.bwwdw.com/article/bqtj.html

Top