- 浏览: 308901 次
最新评论
-
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
hunanjun000:
《研磨struts2》第四章 Action 之 4.5 Action的其它重要知识
8.2 数据标签
数据标签更关注如何从值栈上取值或者向值栈赋值。
8.2.1 property标签
1:功能:
用来输出OGNL表达式的值。
2:属性
property标签的主要属性:
- value:用来获取值的OGNL表达式,如果value属性值没有指定,那么将会被设定为top,也就是返回位于值栈最顶端的对象。
- default:如果按照value属性指定的OGNL求值后返回的是空值,但是你仍然希望输出某些内容,那么就可以使用default属性来指定这些内容
- escape:是否转义HTML,默认为true
- escapeJavaScript:是否转义JavaScript,默认为false
3:属性value和default的使用
直接看示例:
- 第一个是有value值的,应该输出value所设置的OGNL表达式运算后的值;
- 第二个虽然设置了value,但是value所设置的OGNL表达式是找不到值的,那么应该输出default的值;
- 第三个就没有设置value属性,那么应该输出位于值栈最顶端的对象。
示例代码如下:
运行结果如下图所示:
图8.1 示例property标签
4:属性escape的使用
接下来说明一下escape属性,它指明了是否把要显示的值按照HTML的转义规则进行转义。看如下的示例,一个是转义的,一个是不转义的,示例代码如下:
首先要注意<s:property value="'<hr>'"/>中的value里面的值为'<hr>',这对单引号的意思是,单引号里面的东西不按照OGNL表达式来解析,可以直接看成一个字符串。
那么,现在的两句<s:property/>,要打印的内容一样,只是上面的一句按照HTML转义,而下面的一句不按照HTML转义。因此,上面的可以正确打印出字符串<hr>,而下面的就是打出横线来。如图:
图8.2 <s:property/>的escape属性指定了是否按照HTML进行转义
为何会是这样呢?查看一下页面对应的源代码,你就什么都明白了,页面对应的源代码如下:
你会发现,转义的那个输出变成了“<hr>”,不转义的那个是直接输出成“<hr>”,其实转义,就是把HTML中的一些特殊字符用已经定义好的实体进行替换的过程,常见的HTML转移字符如下列表:
HTML中还有很多需要转移的字符,这里就不去赘述了,可查阅相关的资料。
8.2.2 set标签
1:功能:
对设置的表达式进行求值,并将结果赋给特定作用域中的某个变量。简单点说,set标签类似于定义一个变量,并赋值。
set标签有很多应用的地方,比如一个对象在OGNL上的访问层次较深,就可以使用set标签给它定义成一个变量,这样就可以保证在多次引用它的时候更方便。
2:属性
set标签的主要属性:
- id:已过时,请用var代替。
- name:已过时,请用var代替。
- var:变量名,可以在OGNL表达式中使用这个名称来引用存放到值栈的这个对象。
- scope:变量的生存周期,可以选择application、session、request、page或action,默认为action。
- value:设置给变量的值,可以是常量,也可以是OGNL表达式
3:属性var和value的使用
假如现在Session中有一个叫user的属性,要访问它的name属性和age属性,不用set标签的话,写法如下:
如果使用了set标签,可以给Session中的user属性定义一个变量,名称为tempUser,这样在以后直接访问这个tempUser就可以了,示例如下:
请注意,使用tempUser这个变量名的时候,需要在前面加上#号。
再来一个示例,比如要在页面定义一个int型的变量,然后用标签来实现类似于i++的功能,该怎么实现呢?示例代码如下:
运行测试一下,效果如图所示:
图8.3 示例set标签
4:属性scope的使用
set标签的scope属性有如下选择:
- application:表示这个变量的生存周期是Servlet中的Application范围,也就是ServletContext范围
- session:表示这个变量的生存周期是会话范围
- request:表示这个变量的生存周期是请求范围
- page:表示这个变量的生存周期是当前页面范围
- action:表示这个变量的生存周期是当前的ActionContext范围
简单的示范一下,在第一个页面中定义变量,当然要设置scope,示例如下:
- <%@ taglib prefix="s" uri="/struts-tags"%>
- <s:set var="v1" scope="application" value="'aplication范围的值'"/>
- <s:set var="v2" scope="session" value="'session范围的值'"/>
- <s:set var="v3" scope="request" value="'request范围的值'"/>
- <s:set var="v4" scope="page" value="'page范围的值'"/>
- <s:set var="v5" scope="action" value="'action范围的值'"/>
运行后跳转到的结果页面,示例如下:
- <%@ taglib prefix="s" uri="/struts-tags" %>
- 输出aplication值:<s:property value="#application['v1']"/>
- <br>
- 输出session值:<s:property value="#session['v2']"/>
- <br>
- 输出request值:<s:property value="#request['v3']"/>
- <br>
- 输出page值:<s:property value="#attr['v4']"/>
- <br>
- 输出action值:<s:property value="#v5"/>
上述写法中,尤其要注意输出page的值,用的是“#attr”,而不是“#page”。
运行测试一下,结果如下图所示:
图8.4 示例set标签的scope属性
你会发现request、page、action三个范围内都没有值,为什么呢?
原因很简单,上面的示例是在上一个页面展示的时候设置的request值,当提交跳转到结果页面的时候,这是另外一个request了,因此request里面没有值是正常的。
而page里面没有值就更好理解了,已经是不同的页面了,当然没有值了。
action范围里面没有值,是因为,Struts2会为每次请求创建不同的Action实例,请求不同,那么Action实例也就不同,自然action范围也就没有值了。
那么要如何才能让他们有值呢?
一个最简单的办法,就是在结果页面,在输出数据前重新设置这些值,示例如下:
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <s:set var="v3" scope="request" value="'request范围的值'"/>
- <s:set name="v4" scope="page" value="'page范围的值'"/>
- <s:set var="v5" scope="action" value="'action范围的值'"/>
- 输出aplication值:<s:property value="#application['v1']"/>
- <br>
- 输出session值:<s:property value="#session['v2']"/>
- <br>
- 输出request值:<s:property value="#request['v3']"/>
- <br>
- 输出page值:<s:property value="#attr['v4']"/>
- <br>
- 输出action值:<s:property value="#v5"/>
再次运行测试,结果如下图所示:
图8.5 示例set标签的scope属性2
这就能获取到所有的值了。
8.2.3 push标签
1:功能:
用来将对象的引用压入值栈中。
这也是很有用的,比如:如果一个对象访问层次过深的时候,可以用push标签来做访问的简化。其做法和set标签不同,push标签是把指定的对象放到值栈的栈顶,这样在访问这个对象的时候,就可以直接访问它了。
2:属性:
push标签的主要属性:
- value:用来指定放到值栈栈顶的对象。
3:示例
沿用前面的示例,假如Session中有一个叫user的属性,需要访问它的name属性和age属性。如果使用push标签的话,写法示例如下:
请和set标签的写法对比一下,这两个标签都常用在简化OGNL访问的时候,但是有区别的:
- push标签的作用域是在自己标签范围内,两个<s:property/>都是它的子元素,而set标签的作用域是ActionContext,所以两个<s:property/>只要在它后面即可。
- push标签内的<s:property/>直接引用这个对象的属性即可,而set标签后的<s:property/>还要属性名前加上set标签为对象取的变量名称。
很明显,当在需要设置多个数据的时候,push标签会更简单。
8.2.4 bean与param标签
1:bean标签的功能:
用来创建JavaBean实例,并将其压入值栈中,可以添加param标签。
param标签的功能:
用来为其它标签添加参数化设置的功能,比如为bean标签初始化JavaBean的属性的值。但是请注意一点:param标签主要用来配合其它标签来指定参数,并不是只能与bean标签连用。
2:属性:
bean标签的主要属性:
- name:指定了要创建的JavaBean的全类名,必须要设置
- var:引用这个JavaBean实例的名称,在bean标签创建JavaBean实例之后,将这个实例压入值栈中,其key值就是这个var指定的值。
param标签的主要属性:
- name:参数的名称
- value:参数的值
3:示例
来示例一下,使用bean标签创建JavaBean,并使用param标签来为它的属性设置初始值。示例代码如下:
以上的代码建立了一个叫user的JavaBean,并调用了setAge方法,赋值为100,然后把这个JavaBean实例压入到值栈中。
在后面的引用中的“#user.age”,引用的就是刚刚创建的user对象,并调用它的getAge方法。
8.2.5 date标签
1:功能:
用来格式化输出一个日期数据。
2:属性
date标签的主要属性:
- format:用于指定日期显示的格式,形如:yyyy-MM-dd。如果不指定的话,将会去找国际化信息中key为struts.date.format的指定值。
- name:被格式化的值,必须设置,它本身是一个OGNL表达式。
- nice:是否显示当前时间与指定时间的差,如果设置为true,则不再显示指定时间,只显示当前时间与指定时间的差。
3:示例
先来创建一个日期,然后把它放在request的属性里面,key为d,然后使用date标签访问,得到的结果是:第一个date标签会正确显示日期,而第二个date标签则显示当前时间与指定时间的时间差。示例代码如下:
- <%@page import="java.util.Date" %>
- <%@page import="java.sql.Timestamp" %>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <%
- Timestamp t = Timestamp.valueOf("2010-09-22 00:00:00");
- Date d = new Date(t.getTime());
- request.setAttribute("d",d);
- %>
- 日期为:<s:date name="#request.d" format="yyyy-MM-dd"/>
- <br>
- 当前时间与指定时间的差为:<s:date name="#request.d" format="yyyy-MM-dd" nice="true"/>
去运行测试一下,结果页面如下图所示:
图8.6 示例date标签
8.2.6 debug标签
1:功能:
debug标签可以帮助程序员进行调试,它在页面上生成一个链接,点击这个链接我们就可以查看ActionContext和值栈中所有能访问的值。
2:示例:
在页面上非常简单,只需要把debug标签放上去就可以,示例如下:
运行测试一下,页面如下图所示:
图8.7 示例debug标签
点击这个超链接,得到的页面,如下图所示:
图8.8 debug的堆栈信息
8.2.7 url与a标签
1:url标签的功能:
url标签用来生成一个url,但是它不显示在页面上,需要其他的标签引用它,比如a标签。url标签可以包含param标签,通过param标签来设置url要传递的参数。
a标签的功能:
用来生成HTML的<a>标签,可以通过url标签来设置它的url,也可以使用param标签来设置a标签的url所需要的参数。
2:属性:
url标签的属性很多,主要的属性有:
- namespace:要访问的Action所在的包的命名空间。
- action:要访问的Action的名字。
- method:访问execute方法以外的其他方法。
- id:被放入值栈的名字,其他标签可以通过这个值来访问这个url标签所生成的url。如果指定这个属性,则url标签不会在页面上生成字符串。
- includeContext:生成的URL中是否包含当前上下文。
a标签的属性也非常多,主要是与HTML对应,主要的属性有:
- href:超链接的URL
a标签与url及其类似,a标签拥有url标签的所有属性,它们之间的不同在于a标签用来直接生成一个链接,而url标签是用来生成一个字符串。
a标签比url标签还多出来一些属性,比如onchange,这些属性都是用来生成对应的HTML的事件的。
3:示例:
分多种方式来使用url和a标签,来体会它们的使用。
(1)不设置id属性,示例如下:
这样做并不会在页面上生成一个链接,而是仅仅生成一个字符串并显示在界面上,如下所示:
其中的参数uuid=01正是url标签的子元素, param标签生成的。
(2)设置id属性,示例如下:
这样运行,再访问页面,发现是一片空白。因为设置了id属性,url标签把生成的url字符串放入值栈等待其他的标签引用。
(3)使用a标签来引用刚刚由url标签生成的url字符串,示例如下:
注意:a标签的href属性,是通过%{test}来引用值栈中的test的,这样才能正确的生成一个链接。
(4)单独使用a标签
来把上边的url标签和a标签连用的示例,改成单独使用a标签,示例如下:
8.2.8 include与param标签
1:include标签的功能:
include标签的作用是把其它页面包含到当前的页面上。include标签类似于jsp的include标准动作,也是一种动态引入,在运行期间动态引入被引入页面所生成的HTML,引入页面和被引入页面完全是独立的页面运行,所以不能共享变量。
2:属性
include标签的主要属性:
- value :用来指定其他可以被引用的URL的名字,必须要设置。
3:示例
(1)制作一个被引入的页面,示例如下:
(2)在结果页面上引入这个页面,示例如下:
(3)include标签可以与param标签连用,向被包含的URL传入参数,示例如下:
8.2.9其它标签
通过前面的讲述,我们看到了Struts2中大多数的数据标签,但这还不是全部,常用的数据标签还包括i18n标签和text标签,但是它们必须与国际化信息连用,将在后面的章节讲述,这里就没有涉及了。
再强调一下param标签,通过这一节的讲述可以发现,它和bean标签、url标签、a标签和include标签都可以连用,它不会单独都使用,都是作为其他标签的子标签,用于传递参数。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4078.html】
欢迎访问http://sishuok.com获取更多内容
发表评论
-
研磨struts2 目录贴
2012-08-24 12:12 163331.1 《研磨struts2》 第一章 Struts2 ... -
跟着cc学设计 之 研磨设计模式 视频教程 出炉了
2012-08-15 07:16 2研磨设计模式——跟着CC学设计系列精品课程,上线了! ... -
研磨struts2 目录
2012-07-30 21:15 2471.1 《研磨struts2》 第一章 Strut ... -
研磨struts2 目录
2012-07-30 16:54 361.1 《研磨struts2》 第一章 Stru ... -
《研磨struts2》A.2 struts.properties的配置 之 A.2.1 概述
2012-07-09 12:10 3055A.2.1 概述 如果我们希望覆盖在 ... -
《研磨struts2》附录A Struts2的配置 之 A.1 struts.xml的配置
2012-07-09 12:10 2710A.1 struts.xml的配置 A.1.1 ... -
《研磨struts2》第二十一章 零配置 之 21.3 通过注解来实现零配置
2012-07-06 08:07 291121.3 通过注解来实现零配置 21.3.1 ... -
《研磨struts2》第二十一章 零配置 之 21.2 约定大于配置
2012-07-05 10:44 245821.2 约定大于配置 21.2.1 约定 ... -
《研磨struts2》第二十一章 零配置 之 21.1 概述
2012-07-05 10:44 231321.1 概述 21.1.1 零配置概述 在 ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.3 整合Struts2与SiteMesh
2012-07-04 08:15 2072在Struts2中使用SiteMesh ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.2 单独使用SiteMesh
2012-07-03 08:00 209120.2 单独使用SiteMesh 20. ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.1 调整应用的风格
2012-07-03 07:59 185520.1 调整应用的风 ... -
《研磨struts2》19.2 使用execAndWait拦截器模拟进度条 之 19.2.1 模拟长时间运行的Action
2012-07-02 12:24 213719.2.1模拟长时间运行的Action ... -
《研磨struts2》第十九章 进度条 之 19.1 使用“进度条”告知用户进度
2012-07-02 12:23 214119.1 使用“进度条”告知用户进度 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.3 Struts2结合JFreeChart
2012-06-28 12:12 199918.3 Struts2结合JFreeChart ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.2 Struts2插件概述
2012-06-28 12:11 2022Struts2并没有求大求全,企图把所有 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.1 JFreeChart使用
2012-06-20 15:48 227818.1 JFreeChart使用 18.1.1概 ... -
研磨struts2(1-10章)电子书下载
2012-06-19 07:30 6058研磨struts2的博客文章 私塾在线学习网 《研 ... -
《研磨struts2》第十七章 防止重复提交 之 17.3 更强大的tokenSession拦截器
2012-06-18 13:46 206917.3 更强大的tokenSession拦截器 ... -
《研磨struts2》第十七章 防止重复提交 之 17.2 使用标签
2012-06-18 13:45 233317.2 使用<s:token/>标签 ...
相关推荐
Struts2 是一款流行的 Java Web 开发框架,它极大地简化了视图与控制器的交互。在 Struts2 中,Taglib(标签库)是用于增强 JSP 页面功能的关键...因此,熟悉 Struts2 的 Taglib 是 Java Web 开发者必备的技能之一。
- 引入Struts2标签库:在JSP页面头部添加`<%@ taglib prefix="s" uri="/struts-tags"%>`。 - 在Action中定义相关属性和方法。 - 在JSP页面中使用标签,如`s:textfield name="username"`绑定Action的username属性...
Struts2 标签库详解 Struts2 提供了一个强大的标签库,用于简化 Web 应用程序的开发过程。这些标签可以分为两类:通用标签和 UI 标签。下面,我们将详细介绍 Struts2 标签库的使用。 4.1 通用标签 通用标签用来...
Pager Taglib是Struts2的一个重要组成部分,它提供了分页功能,使我们能够轻松地处理大量数据的显示,提升用户体验。本文将详细介绍如何安装和使用Pager Taglib。 首先,我们需要了解Pager Taglib的核心概念。Pager...
Struts2.0 Taglib标签库是Struts2框架中的核心组成部分,它提供了一组丰富的JSP标签,简化了视图层的开发,使得开发者可以更加专注于业务逻辑,而不用过多地处理HTML和Java代码的混杂。这些标签主要分为以下几大类:...
在Struts2中,自定义标签是提高代码可读性和可维护性的重要工具。本文将深入探讨Struts2自定义标签的实现机制、优点以及如何在实际项目中进行应用。 一、Struts2自定义标签的概念 自定义标签是JSP的一种扩展,允许...
Struts 2标签的用法非常广泛,包括表单标签、验证标签、数据标签等。例如,使用Struts 2的表单标签可以快速创建表单,例如: ``` 用户名"/> 密码"/> 登录"/> ``` 这段代码创建了一个简单的登录表单,并使用...
struts taglib使用示例 struts taglib使用示例 struts taglib使用示例struts taglib使用示例 struts taglib使用示例
在使用Struts2标签库前,需要在JSP页面中引入相应的标签库,通常使用`<%@taglib>`指令,如`<%@taglib uri="/struts-tags" prefix="s"%>`。对于Servlet2.3之前的版本,可能还需要在web.xml中配置标签库的定义,但...
- 使用Struts2的验证框架,结合标签进行数据验证,提高用户体验。 - 结合 strut2 的拦截器和结果类型,实现更高效的流程控制。 总的来说,Struts2标签和API文档为开发者提供了一种简洁、高效的方式来处理用户界面...
在Struts2中,标签库是其核心组件之一,极大地简化了视图层的开发,使得开发者可以更加专注于业务逻辑而不是繁琐的HTML代码。本篇文章将深入探讨Struts2的标签库,并通过具体案例进行讲解。 首先,Struts2标签库...
在Struts2中,标签库是其核心特性之一,它提供了一系列预定义的JSP标签,用于简化视图层的编码,提高代码的可读性和可维护性。下面我们将详细探讨Struts2标签的使用方法以及EL(Expression Language)表达式。 1. *...
struts-taglib-1.3.10.jar struts-taglib.jar taglib.jar
Struts2 标签库及国际化的使用案例 Struts2 框架提供了强大的标签库和国际化功能,本实验旨在掌握 Struts 2 标签库和国际化功能的使用,并实现用户注册页面的国际化显示。 一、Struts2 标签库 Struts2 框架提供了...
而Pager-taglib是Struts2的一个扩展,它提供了一种便捷的方式来实现页面的分页功能,这对于处理大量数据的展示至关重要。 在分页应用中,Pager-taglib允许开发者在页面上显示数据的一部分,而不是一次性加载所有...
Struts2的标签库不仅限于核心库,还可以通过插件机制添加第三方标签库,如Struts2-dojo-plugin、Struts2-jquery-plugin等,这些插件提供了丰富的UI组件,如日期选择器、下拉树等。 总结,Struts2标签库是其强大功能...
struts2 标签 Taglib (Struts2标签库)