ch3-5 struts 2标签库

上传人:今*** 文档编号:106910952 上传时间:2019-10-16 格式:PPT 页数:102 大小:1.29MB
返回 下载 相关 举报
ch3-5 struts 2标签库_第1页
第1页 / 共102页
ch3-5 struts 2标签库_第2页
第2页 / 共102页
ch3-5 struts 2标签库_第3页
第3页 / 共102页
ch3-5 struts 2标签库_第4页
第4页 / 共102页
ch3-5 struts 2标签库_第5页
第5页 / 共102页
点击查看更多>>
资源描述

《ch3-5 struts 2标签库》由会员分享,可在线阅读,更多相关《ch3-5 struts 2标签库(102页珍藏版)》请在金锄头文库上搜索。

1、Java EE应用开发,3.5 Struts 2标签库,本节要点,Struts 2标签库 控制标签 数据标签 主题和模板 表单标签 非表单标签,Struts 2的标签库,Struts 2也提供了大量标签来帮助开发表现层页面。 Struts2标签库的组成 Struts2框架的标签库可以分为以下三类: 用户界面标签(UI标签):主要用来生成HTML元素的标签。 表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。 非表单标签:主要用于生成页面上的tree,Tab页等。 非用户界面标签(非UI标签):主要用于数据访问,逻辑控制。 数据访问标签:主要包含用于输出值栈(ValueS

2、tack)中的值,完成国际化等功能的标签。 流程控制标签:主要包含用于实现分支,循环等流程控制的标签。 AJAX(Asynchronous JavaScript And XML)标签:用于支持Ajax效果,Struts 2的标签分类,Struts2标签库,在早期的WEB开发中,JSP视图控制和显示技术主要依靠Java脚本来实现,这样一来,JSP页面重新嵌入了大量的Java脚本代码,给开发带来了极大的不方便。 从JSP1.1规范后,JSP增加了自定义标签库的支持。标签库是一种组件技术,通过标签库,可以将复杂的Java脚本代码封装在组件中,开发者只需要使用简单的代码就可以实现复杂的Java脚本功能

3、。提供了Java脚本的复用性,提高了开发者的开发效率。 Struts2标签库相对struts1.x进行了巨大的改进,支持OGNL表达式,不再依赖任何表现层技术。,Struts2标签的使用,我们可以在struts2-core-2.x.x.x.jar压缩文件的META-INF目录下找到struts-tags.tld文件,这个文件里定义了Struts2的标签。 要在jsp中使用Struts2的标志,先要指明标志的引入。通过jsp的代码的顶部加入以下的代码: ,Struts2标签语法(一),Struts2的标签都支持动态数据的访问,标签的属性都可以使用OGNL表达式,struts2标签的属性具有类型,

4、这些类型可以简单地分为字符串类型和非字符串类型,对于字符串类型的属性,如果要访问动态数据,需要使用% 这样的语法, 例如: include标签的value属性是字符串类型,Struts2将对这个属性进行解析,查找符合%样式的字符串,然后将花括号之间的内容作为OGNL表达式进行求值。如果属性中没有%样式的字符串,那么属性的值将被直接看成是字符串数据。 例如: property标签的value属性是Object类型,对于非字符串类型的属性值,将直接作为OGNL表达式进行求值。 例如: 它的值username将作为OGNL表达式进行求值,结果可能是值栈中位于栈顶的对象的username属性的值。如果

5、要为非字符串类型的属性直接指定字符串数据,那么需要使用OGNL中的字符串常量,即用单引号()或双引号(“”)将字符串括起来。 例如: value属性的值zhangsan作为字符串常量,计算结果就是zhangsan,因此输出zhangsan。,Struts2标签语法(二),除上述用法之外,也可以使用%这样的语法来指定字符串常量。 例如: 在这种情况下,% 将被忽略,花括号中的内容将作为表达式被计算。 总结一下,struts2标签的属性按照下列的三个规则进行计算。 (1)所有的字符串属性类型都会解析“%”这样的语法。 (2)所有的非字符属性类型都不会被解析,而是直接被看作一个OGNL表达式进行求值

6、 (3)对于第二个规则的例外情况是,如果非字符串属性使用了“%”语法,那么%将被忽略,花括号中的内容将作为表达式计算。 如果在使用标签时, 忘记了某个属性是字符串类型,还是非字符串类型,那么有一个简单的方法,那就是不考虑它是什么类型,统一使用“%”语法。,Struts2通用标签,Struts2中通用标签可以分为二类:控制标签和数据标签。控制标签用于呈现页面时控制执行流程,数据标签用于访问值栈中的数据。 数据标签:用于访问ActionContext和值栈中的数据。数据标签包括: property set push param bean action include url a i18n text

7、 date debug 控制标签:用于在呈现结果页面时控制程序的执行流程,根据程序执行的状态输出不同的结果,控制标签包括下列标签: if/elseif/else iterator append merge generator subset sort,数据标签-property标签,property标签用于输出值栈中的对象的属性(property)值,使用value属性来指定要输出的对象属性,如果没有指定value属性,那么默认输出栈顶对象。 property标签属性,在前面的章节中,我们已经使用过了property标签,我们再看一个例子: 取出栈顶对象(通常是action)的username属

8、性并输出,如果没有找到username属性,那么输出”游客”。,数据标签-set标签,Set标签将一个值赋给指定范围内变量。Set标签在某些情况下是比较有用的,例如在页面中多次引用一个复杂的表达式,我们可以将这个表达式赋给一个变量,然后直接引用变量。带来的好处就是: 提升了性能(表达式的计算只有一次) 提高了代码的可读性。 set标签属性,Set标签以name属性的值作为键(key),将value属性的值保存到指定的范围对象中。属性scope取值中的page,request,session,application同JSP的4种范围,如果指定了action范围(默认值),value属性的值将被同

9、时保存到request范围和OgnlContext中。,示例:访问地址:http:/localhost:8080/./setTag.action,数据标签-push标签,push标签用于把一个值压入值栈(位于栈顶),注意和set标签的区别,set标签是将值放到action上下文中。当push标签结束后,push标签放入值栈中的对象将被删除,换句话说,要访问push标签压入栈中的对象,需要在标签内部去访问。 push标签的属性,public class User private String username; private String email; private String sex;

10、省略set/get方法 ,Push标签示例,访问:http:/localhost:8080/./pushTag.action,数据标签-param标签,param标签被用作其他标签的子标签,用于为其他标签提供参数,例如:为bean标签和include标签提供参数。 param标签的属性,当使用param标签时, 参数的值可以通过value属性给出,也可以在标签体中给出(开始标签和结束标签之间的文本)。这二种用法有一些区别。我们看下面的例子: blue 在第(1)种情形中,参数值将作为java.lang.String对象(即字符串)被放入栈中; 在第(2)种情形中,参数值将作为表达式进行计算,如

11、果blue不存在,则color参数的值为null。 在第(1)种情形中,要为color指定字符串值,可以写为: 或者 使用单引号包围字符串,表明这是一个字符串常量,数据标签-bean标签,bean标签用于实例化一个JavaBean对象(必须遵照JavaBean规范),bean标签的标签体内可以包含多个param标签,用于设置Bean的属性(必须有相应的setter方法)。如果指定了id属性,则创建的Bean实例将被放入到OgnlContext中。 bean标签的属性,注意: id属性是可选的,无论是否指定id属性,bean标签创建的JavaBean实例都会被压入到值栈的顶部,在bean标签内部

12、可以直接访问创建的对象,无须使用”#”标记,当bean标签结束的时候,bean标签创建的实例将从值栈中删除。 如果指定了id属性,那么bean标签创建的JavaBean实例还将被放到OgnlContext中,这样在bean标签的外部,也可以访问创建的对象了,不过此时就要使用”#”标记了。,bean标签示例,bean标签示例说明,在没有指定id属性的情况下,创建的User对象只被压入值栈,在bean标签的内部使用property标签可以直接访问User对象的属性。在bean标签外部,由于值栈中的User对象已被删除,所以无法访问到User对象的属性了。 在指定了id属性的情况下,创建的User对

13、象除了被放到值栈中外,还被放到action上下文中,因此在标签的内部和外部都可以访问User对象属性,只不过在标签外部访问时需要添加#user前缀 访问路径:http:/localhost:8080/beanTag.action,数据标签-action标签,通过指定action的名字和可选的名称空间,action标签允许你在JSP中直接调用action。如果将标签的excuteResult属性设为true,那么action对应的结果输出也将被包含到本页面中。 在action标签的标签体中可以嵌套param标签,向action传递参数。 action标签的属性,如果指定了id属性,则action

14、将被放到OgnlContext中,在action标签结束后,可以通过#id来引用action.,ActionTagAction.java,actionTagSuccess.jsp,actionTag.jsp,示例说明,在第一个action标签调用中,执行了结果,但没有设置ActiontagAction的username和email属性,所以结果页面中的这两项输出为空。 在第二个action标签调用中,不执行结果,调用ActionTagAction的doDefault()方法,在这个方法中,我们在请求对象中设置了greeting属性,在页面中使用property标签,通过表达式#attr.gre

15、eting来获取greeting属性。 在第三个action标签调用中,执行了结果,并通过param标签设置了ActionTagAction的username和email属性,在结果页面中通过property标签输出这两个属性的值。 访问路径:http:/localhost:8080/actionTag.jsp,数据标签-include标签,include标签类似于JSP的标签,用于包含一个Servlet或JSP页面。include标签的标签体内可以包含多个param标签,用于向被包含的页面传递请求参数 include标签的属性,include标签示例说明,在jsp2.jsp中,我们使用JSP

16、的EL表达式来获取传的请求参数。注意:在include标签内部使用param标签向被包含的页面传递的请求参数时,不能使用如下的property标签来访问: 本例中包含的是jsp文件,参数存放在request中,所以可用EL表达式来访问 #parameters引用的实质是一个Map对象,并不等同于HttpServletRequest对象。 #parameters是由struts2从request对象中将参数抽取后形成一个单独的Map对象,因此#parameters是由struts2处理的。 在包含页面时,如果页面中有中文,将会出现乱码,要解决这个问题,可以在struts.xml文件中配置struts.i18n.encoding属性,如下: 访问路径:http:/localhost:8080/./includeTag.jsp,数据标签-i18n和text标签,i18n和text标签用于对国际化提供支持。i18n标签用于将一个资源

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号