Struts2数据标签.docx
- 文档编号:9729612
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:19
- 大小:333.11KB
Struts2数据标签.docx
《Struts2数据标签.docx》由会员分享,可在线阅读,更多相关《Struts2数据标签.docx(19页珍藏版)》请在冰豆网上搜索。
Struts2数据标签
Struts2数据标签
8.2 数据标签
数据标签更关注如何从值栈上取值或者向值栈赋值。
8.2.1property标签
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属性,那么应该输出位于值栈最顶端的对象。
示例代码如下:
java代码:
查看复制到剪贴板打印
1.<%@ taglib prefix="s" uri="/struts-tags" %>
2.<%
3. request.setAttribute("request","请求的属性值");
4.%>
5.输出value值:
property value="#request['request']"/> 6. 7.输出缺省值: property value="#request['request2']" default="缺省值"/> 8. 9.输出栈顶的对象: property/> 运行结果如下图所示: 图8.1 示例property标签 4: 属性escape的使用 接下来说明一下escape属性,它指明了是否把要显示的值按照HTML的转义规则进行转义。 看如下的示例,一个是转义的,一个是不转义的,示例代码如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2. property value="' 3. property value="' 首先要注意 propertyvalue="' 那么,现在的两句 property/>,要打印的内容一样,只是上面的一句按照HTML转义,而下面的一句不按照HTML转义。 因此,上面的可以正确打印出字符串 如图: 图8.2 property/>的escape属性指定了是否按照HTML进行转义 为何会是这样呢? 查看一下页面对应的源代码,你就什么都明白了,页面对应的源代码如下: java代码: 查看复制到剪贴板打印 1. 2. 3. 4. 5. 6. 7. 8.<hr> 9.
'"/>
'" escape="false"/>
'"/>中的value里面的值为'
',这对单引号的意思是,单引号里面的东西不按照OGNL表达式来解析,可以直接看成一个字符串。
,而下面的就是打出横线来。
10.
11.
12.
你会发现,转义的那个输出变成了“<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标签的话,写法如下:
java代码:
查看复制到剪贴板打印
1. property value="#session.user.name"/> 2.;s: property value="#session.user.age"/> 如果使用了set标签,可以给Session中的user属性定义一个变量,名称为tempUser,这样在以后直接访问这个tempUser就可以了,示例如下: java代码: 查看复制到剪贴板打印 1. set var="tempUser" value="#session.user"/> 2. property value="#tempUser.name"/> 3. property value="#tempUser.age"/> 请注意,使用tempUser这个变量名的时候,需要在前面加上#号。 再来一个示例,比如要在页面定义一个int型的变量,然后用标签来实现类似于i++的功能,该怎么实现呢? 示例代码如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2. set var="i" value="1"/> 3.输出i值: property value="#i"/> 4. 5. set var="i" value="#i+1"/> 6.输出i++后的值: property value="#i"/> 运行测试一下,效果如图所示: 图8.3 示例set标签 4: 属性scope的使用 set标签的scope属性有如下选择: ∙application: 表示这个变量的生存周期是Servlet中的Application范围,也就是ServletContext范围 ∙session: 表示这个变量的生存周期是会话范围 ∙request: 表示这个变量的生存周期是请求范围 ∙page: 表示这个变量的生存周期是当前页面范围 ∙action: 表示这个变量的生存周期是当前的ActionContext范围 简单的示范一下,在第一个页面中定义变量,当然要设置scope,示例如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags"%> 2. set var="v1" scope="application" value="'aplication范围的值'"/> 3. set var="v2" scope="session" value="'session范围的值'"/> 4. set var="v3" scope="request" value="'request范围的值'"/> 5. set var="v4" scope="page" value="'page范围的值'"/> 6. set var="v5" scope="action" value="'action范围的值'"/> 运行后跳转到的结果页面,示例如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2.输出aplication值: property value="#application['v1']"/> 3. 4.输出session值: property value="#session['v2']"/> 5. 6.输出request值: property value="#request['v3']"/> 7. 8.输出page值: property value="#attr['v4']"/> 9. 10.输出action值: property value="#v5"/> 上述写法中,尤其要注意输出page的值,用的是“#attr”,而不是“#page”。 运行测试一下,结果如下图所示: 图8.4 示例set标签的scope属性 你会发现request、page、action三个范围内都没有值,为什么呢? 原因很简单,上面的示例是在上一个页面展示的时候设置的request值,当提交跳转到结果页面的时候,这是另外一个request了,因此request里面没有值是正常的。 而page里面没有值就更好理解了,已经是不同的页面了,当然没有值了。 action范围里面没有值,是因为,Struts2会为每次请求创建不同的Action实例,请求不同,那么Action实例也就不同,自然action范围也就没有值了。 那么要如何才能让他们有值呢? 一个最简单的办法,就是在结果页面,在输出数据前重新设置这些值,示例如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2. 3. set var="v3" scope="request" value="'request范围的值'"/> 4. set name="v4" scope="page" value="'page范围的值'"/> 5. set var="v5" scope="action" value="'action范围的值'"/> 6. 7.输出aplication值: property value="#application['v1']"/> 8. 9.输出session值: property value="#session['v2']"/> 10. 11.输出request值: property value="#request['v3']"/> 12. 13.输出page值: property value="#attr['v4']"/> 14. 15.输出action值: property value="#v5"/> 再次运行测试,结果如下图所示: 图8.5 示例set标签的scope属性2 这就能获取到所有的值了。 8.2.3push标签 1: 功能: 用来将对象的引用压入值栈中。 这也是很有用的,比如: 如果一个对象访问层次过深的时候,可以用push标签来做访问的简化。 其做法和set标签不同,push标签是把指定的对象放到值栈的栈顶,这样在访问这个对象的时候,就可以直接访问它了。 2: 属性: push标签的主要属性: ∙value: 用来指定放到值栈栈顶的对象。 3: 示例 沿用前面的示例,假如Session中有一个叫user的属性,需要访问它的name属性和age属性。 如果使用push标签的话,写法示例如下: java代码: 查看复制到剪贴板打印 1. push value="#session.user"> 2. property value="name"/> 3. property value="age"/> 4. push> 请和set标签的写法对比一下,这两个标签都常用在简化OGNL访问的时候,但是有区别的: ∙push标签的作用域是在自己标签范围内,两个 property/>都是它的子元素,而set标签的作用域是ActionContext,所以两个 property/>只要在它后面即可。 ∙push标签内的 property/>直接引用这个对象的属性即可,而set标签后的 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标签来为它的属性设置初始值。 示例代码如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2. bean name="cn.javass.user.UserModel" var="user"> 3. param name="age" value="100"/> 4. bean> 5. property value="#user.age"/> 以上的代码建立了一个叫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标签则显示当前时间与指定时间的时间差。 示例代码如下: java代码: 查看复制到剪贴板打印 1.<%@page import="java.util.Date" %> 2.<%@page import="java.sql.Timestamp" %> 3.<%@ taglib prefix="s" uri="/struts-tags" %> 4.<% 5. Timestamp t = Timestamp.valueOf("2010-09-22 00: 00: 00"); 6. Date d = new Date(t.getTime()); 7. request.setAttribute("d",d); 8.%> 9.日期为: date name="#request.d" format="yyyy-MM-dd"/> 10. 11.当前时间与指定时间的差为: date name="#request.d" format="yyyy-MM-dd" nice="true"/> 去运行测试一下,结果页面如下图所示: 图8.6 示例date标签 8.2.6 debug标签 1: 功能: debug标签可以帮助程序员进行调试,它在页面上生成一个链接,点击这个链接我们就可以查看ActionContext和值栈中所有能访问的值。 2: 示例: 在页面上非常简单,只需要把debug标签放上去就可以,示例如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2. debug/> 运行测试一下,页面如下图所示: 图8.7 示例debug标签 点击这个超链接,得到的页面,如下图所示: 图8.8 debug的堆栈信息 8.2.7 url与a标签 1: url标签的功能: url标签用来生成一个url,但是它不显示在页面上,需要其他的标签引用它,比如a标签。 url标签可以包含param标签,通过param标签来设置url要传递的参数。 a标签的功能: 用来生成HTML的标签,可以通过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属性,示例如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2. url action="ognlAction" namespace="/helloworld"> 3. param name="uuid" value="'01'"/> 4. url> 这样做并不会在页面上生成一个链接,而是仅仅生成一个字符串并显示在界面上,如下所示: java代码: 查看复制到剪贴板打印 1./helloworld/helloworld/ognlAction.action? uuid=01 其中的参数uuid=01正是url标签的子元素,param标签生成的。 (2)设置id属性,示例如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2. url action="ognlAction" namespace="/helloworld" id="test"> 3. param name="uuid" value="'01'"/> 4. url> 这样运行,再访问页面,发现是一片空白。 因为设置了id属性,url标签把生成的url字符串放入值栈等待其他的标签引用。 (3)使用a标签来引用刚刚由url标签生成的url字符串,示例如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2. url action="ognlAction" namespace="/helloworld" id="test"> 3. param name="uuid" value="'01'"/> 4. url> 5. a href="%{test}">超链接 a> 注意: a标签的href属性,是通过%{test}来引用值栈中的test的,这样才能正确的生成一个链接。 (4)单独使用a标签 来把上边的url标签和a标签连用的示例,改成单独使用a标签,示例如下: java代码: 查看复制到剪贴板打印 1.<%@ taglib prefix="s" uri="/struts-tags" %> 2. a action="ognlAction" namespace="/helloworld"> 3. param name="uuid" value="'01'"/> 4. 超链接 5. a> 8.2.8 include与param标签 1: include标签的功能: include标签的作用是把其它页面包含到当前的页面上。 include标签类似于jsp的include标准动作,也是一种动态引入,在运行期间动态引入被引入页面所生成的HTML,引入页面和被引入页面完全是独立的页面运行,所以不能共享变量。 2: 属性 include标签的主要属性: ∙value: 用来指定其他可以被引用的URL的名字,必须要设置。 3: 示例 (1)制作一个被引入的页面,示例如下: java代码: 查看复制到剪贴板打印 1.<%@ page language="java" contentType="text/html; charset=gb2312" 2.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2 数据 标签