第五章struts2标签库_第1页
第五章struts2标签库_第2页
第五章struts2标签库_第3页
第五章struts2标签库_第4页
第五章struts2标签库_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Struts2标签库课程结构内容课时(H)第一章:Struts2入门3第二章:Struts2中的Action6第三章:Struts2拦截器3第四章:表达式语言OGNL3第五章:Struts2标签库3第六章:类型转换3第七章:国际化3第八章:文件上传和下载3第九章:校验框架3第五章:Struts2标签库目标:本章旨在向学员介绍:1)Struts2标签库常用的非UI标签2)Struts2标签库常用的UI标签时间:3学时教学方法:授课+练习第五章:Struts2标签库本章内容5.1标签库概述5.2非UI标签5.3UI标签5.1标签库概述在早期的WEB开发中,JSP视图控制和显示技术主要依靠Java脚本来实现,这样一来,JSP页面重新嵌入了大量的Java脚本代码,给开发带来了极大的不方便。从JSP1.1规范后,JSP增加了自定义标签库的支持。标签库是一种组件技术,通过标签库,可以将复杂的Java脚本代码封装在组件中,开发者只需要使用简单的代码就可以实现复杂的Java脚本功能。提供了Java脚本的复用性,提高了开发者的开发效率。Struts2标签库相对struts1.x进行了巨大的改进,支持OGNL表达式,不再依赖任何表现层技术。5.1.1标签的分类Struts2标签库非表单标签库表单标签库Ajax标签库非用户界面标签库用户界面标签库数据访问标签库控制标签库5.1.1标签的分类Struts2框架的标签库可以分为以下三类:用户界面标签(UI标签):主要用来生成HTML元素的标签。表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。非表单标签:主要用于生成页面上的tree,Tab页等。非用户界面标签(非UI标签):主要用于数据访问,逻辑控制。数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。流程控制标签:主要包含用于实现分支,循环等流程控制的标签。AJAX标签:用于支持Ajax效果5.1.2标签的使用我们可以在struts2-core-2.0.11.jar压缩文件的META-INF目录下找到struts-tags.tld文件,这个文件里定义了Struts2的标签。要在jsp中使用Struts2的标志,先要指明标志的引入。通过jsp的代码的顶部加入以下的代码:

<%@taglibprefix=“s”uri=“/struts-tags”%>5.1.3标签的语法Struts2的标签都支持动态数据的访问,标签的属性都可以使用OGNL表达式,struts2标签的属性具有类型,这些类型可以简单地分为字符串类型和非字符串类型,对于字符串类型的属性,如果要访问动态数据,需要使用%{…}这样的语法,例如:<s:includevalue=“%{url}”/>Include标签的value属性是字符串类型,Struts2将对这个属性进行解析,查找符合%{…}样式的字符串,然后将花括号之间的内容作为OGNL表达式进行求值。如果属性中没有%{…}样式的字符串,那么属性的值将被直接看成是字符串数据。例如:<s:includevalue=“urlTag.action”/>对于非字符串类型的属性值,将直接作为OGNL表达式进行求值。例如:<s:propertyvalue=“username”/>property标签的value属性是Object类型,它的值username将作为OGNL表达式进行求值,结果是值栈中位于栈顶的对象的username属性的值。如果要为非字符串类型的属性直接指定字符串数据,那么需要使用OGNL中的字符串常量,即用单引号(‘)或双引号(“)将字符串括起来。例如:<s:propertyvalue=“’zhangsan‘”/>value属性的值‘zhangsan’作为字符串常量,计算结果就是zhangsan,因此输出zhangsan。5.1.3标签的语法除上述用法之外,也可以使用%{…}这样的语法来指定字符串常量。例如:<s:propertyvalue=“%{‘zhangsan’}”/>在这种情况下,%{}将被忽略,花括号中的内容将作为表达式被计算。总结一下,struts2标签的属性按照下列的三个规则进行计算。(1)所有的字符串属性类型都会解析“%{…}”这样的语法。(2)所有的非字符属性类型都不会被解析,而是直接被看作一个OGNL表达式进行求值(3)对于第二个规则的例外情况是,如果非字符串属性使用了“%{…}”语法,那么%{…}将被忽略,花括号中的内容将作为表达式计算。如果大家在使用标签时,忘记了某个属性是字符串类型,还是非字符串类型,那么有一个简单的方法,那就是不考虑它是什么类型,统一使用“%{…}”语法。第五章:Struts2标签库本章内容5.1标签库概述5.2非UI标签5.3UI标签5.2非UI标签Struts2中非UI标签可以分为二类:控制标签和数据标签。控制标签用于呈现页面时控制执行流程,数据标签用于访问值栈中的数据。数据标签:用于访问ActionContext和值栈中的数据。数据标签包括:property set push param bean action include url a i18n text date debug控制标签:用于在呈现结果页面时控制程序的执行流程,根据程序执行的状态输出不同的结果,控制标签包括下列标签:if/elseif/else iterator append mergegenerator subset sort 5.2.1数据标签数据标签主要用来提供各种数据访问功能标签名描述action该标签用来直接调用一个Action,根据executeResult参数,可以将该Action的处理结果包含到页面中bean该标签用来创建一个JavaBean对象date该标签用来格式化输出一个日期属性debug该标签用来生成一个调试链接,当点击该链接时,可以看到当前值栈中的内容i18n该标签用来指定国际化资源文件的baseNameinclude该标签用来包含其他的页面资源param该标签用来设置参数property该标签用来输出某个值,该值可以是值栈或ActionContext中的值push该标签用来将某个值放入值栈set该标签用来设置一个新的变量,并把新变量存储到特定的范围中text该标签用来输出国际化信息url该标签用来生成一个特定的URL5.2.1数据标签--property标签property标签的作用是输出指定值输出value属性指定的值,如果没有指定value属性,则默认输出ValueStack栈顶的值属性名是否必须描述default否如果输出的属性值为null,则显示default属性指定的值escape否默认为true,即不解析HTML标签,如果设定为false则默认解析HTML标签value否指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值id否指定该元素的标识5.2.1数据标签--property标签示例:<h1>注册成功!</h1>用户名:<s:propertyvalue="userName"default=“游客”

/>密码:<s:propertyvalue="password"/>姓名:<s:propertyvalue="name"/>5.2.1数据标签--param标签param标签主要用于为其他标签提供参数。示例:属性名是否必须描述name是该属性指定要实例化的JavaBean实现类id否如果指定了该属性,则JavaBean实例就会放入OgnlContext对象中,从而允许直接通过该id属性来访问该JavaBean实例。如果不指定id属性,JavaBean实例则被放置在值栈中<s:paramname="user">zhangsan</s:param><s:paramname="user"value="'zhangdan'"/><s:paramname="user"value="zhangdan"/>5.2.1数据标签--bean标签bean标签主要用于创建一个JavaBean的实例属性名是否必须描述name是该属性指定要实例化的JavaBean实现类id否如果指定了该属性,则JavaBean实例就会放入OgnlContext对象中,从而允许直接通过该id属性来访问该JavaBean实例。如果不指定id属性,JavaBean实例则被放置在值栈中5.2.1数据标签--bean标签示例:<s:beanname="com.neusoft.tags.Person"> <s:paramname="name"value="'zhangsan'"/> <s:paramname="age"value="18"/>

姓名为:<s:propertyvalue="name"/><br/>

年龄为:<s:propertyvalue="age"/></s:bean><s:beanname="com.neusoft.tags.Person

"id="p"> <s:paramname="name"value="'zhangsan'"/> <s:paramname="age"value="18"/></s:bean>姓名为:<s:propertyvalue="#"/><br/>年龄为:<s:propertyvalue="#p.age"/>5.2.1数据标签--set标签set标签主要用于将某个值放入指定的范围内。示例:属性名是否必须描述name是设置变量的名称scope否用来指定变量的有效范围,该属性值可以是application、session、request、page或action。如果没有指定该属性,则默认将该变量放置在OgnlContext中value否用来设置变量的值,如果没有指定该属性,则将ValueStack栈顶的值赋给该变量id否该属性指定该元素的应用ID<s:setname="p1"value="#p"/><s:setname="p2"value="#p"scope="application"/><s:setname="p3"value="#p"scope="session"/>5.2.1数据标签--set标签<s:beanname="com.neusoft.tags.Person

"id="p"> <s:paramname="name"value="'zhangsan'"/> <s:paramname="age"value="18"/></s:bean><s:setname="p1"value="#p"/>姓名:<s:propertyvalue="#"/>年龄:<s:propertyvalue="#p1.age"/><s:setname="p2"value="#p"scope="application"/>姓名:<s:propertyvalue="#"/>年龄:<s:propertyvalue="#application.p2.age"/><s:setname="p3"value="#p"scope="session"/>姓名:<s:propertyvalue="#attr.p3.age"/>年龄:<s:propertyvalue="#attr.p3.age"/>5.2.1数据标签--include标签include标签主要用于将一个Html页面或者JSP页面或者一个Servlet包含到本页面中示例:属性名是否必须描述value是该属性指定需要被包含的JSP页面或Servletid否该属性指定该元素的应用ID。。。<li>include标签</li><li>包含静态英文页面:<s:includevalue="/en.html"/></li><li>包含静态中文页面:<s:includevalue="/ch.html"/></li><li>%用法:

<s:setvar="c"value="%{'/en.html'}"></s:set><s:includevalue=“%{#c}”></s:include></li>。。。5.2.1数据标签--debug标签用于当前环境下ValueStack和stackcontext中保存的数据在页面上增加<s:debug/>标签,通过debug标签,可以看的系统中ValueStack的全部信息,并可以看到StackContext中的属性。使用debug标签只有一个id属性,这个属性仅仅是该元素一个引用id。5.2.2控制标签数据标签主要用于完成流程控制,例如分支、循环等操作,也可以完成对集合的合并、排序等操作标签名描述if该标签用于控制选择输出elseIf/elseif该标签同if标签结合使用,用来控制选择输出else该标签同if标签结合使用,用来控制选择输出append该标签用于将多个集合拼接成一个集合generator该标签是一个字符串解析器,用来将一个字符串解析成一个集合iterator该标签是一个迭代器,用来迭代输出集合中的数据merge该标签用于将多个集合拼接成一个集合,在使用方式上与append有区别sort该标签用于对集合进行排序subset该标签用于截取集合的部分集合,形成新的子集合5.2.2控制标签--if/elseif/else标签if、elseif、else这3个标签都用来进行分支控制。其中,if和elseif标签利用test属性的值来决定是否计算并输出标签体的内容<!--判断成绩是否及格,不及格,良,优--><s:setname="score"value="99"/><s:iftest="%{#score<60}">

成绩为:不及格</s:if><s:elseiftest="%{#score>=60&&#score<80}">

成绩为:及格</s:elseif><s:elseiftest="%{#score>=80&&#score<90}">

成绩为:良</s:elseif><s:else>

成绩为:优</s:else>

5.2.2控制标签--iterator标签iterator标签主要用于对集合进行迭代,其中集合类型可以是List、Set、Map或数组属性名是否必须描述value否指定迭代集合,通常使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合

id否指定集合中元素的IDstatus否指定迭代时的IteratorStatus实例,用于获取迭代状态5.2.2控制标签--iterator标签遍历List集合遍历Map集合

<s:iteratorvalue="#{1,'中国',2,'美国',3,'日本'}"var="cur"><s:propertyvalue="#cur.key"/><s:propertyvalue="#cur.value"/><br/></s:iterator><s:iteratorvalue="{'中华人民共和国','美利坚合众国','阿拉伯联合酋长国'}"status="status"> <s:property/>|遍历过的元素总数:<s:propertyvalue="#status.count"/>|遍历过的元素索引:<s:propertyvalue="#status.index"/>|当前是偶数?:<s:propertyvalue="#status.even"/>|当前是奇数?:<s:propertyvalue="#status.odd"/>|是第一个元素吗?:<s:propertyvalue="#status.first"/>|是最后一个元素吗?:<s:propertyvalue="#status.last"/>|</s:iterator>第五章:Struts2标签库本章内容5.1标签库概述5.2非UI标签5.3UI标签5.3UI标签数据标签主要用于进行

数据的输入和用户交互等操作Struts2提供了很多表单标签,

大部分表单标签和

HTML表单元素之间一一对应

CheckboxlistComboboxDatetimepickerDoubleselectFileFormHiddenselectoptiontransferselectradiooptgrouptokentextareaupdownselectpasswordtextfiledsubmitreset5.3.1UI标签--checkboxlist标签checkboxlist标签可以一次创建多个复选框属性名是否必须描述list是指定集合属性值。如果list属性为一个Map类型(key-value对),在默认情况下,key赋值给标签的value,value则对应标签的LabellistKey否指定集合元素中的某个属性作为复选框的value。如果集合为Map类型则可以使用key和value分别代表Map对象的key和value作为复选框的valuelistValue否指定集合元素中的某个属性作为复选框的label。如果集合为Map类型则可以使用key和value分别代表Map对象的key和value作为复选框的Label5.3.1UI标签--checkboxlist标签如果集合为List<s:checkboxlistname="list"list="{'Java','.Net','RoR','PHP'}"value="{'Java','.Net'}"/>生成如下html代码:<inputtype="checkbox"name="list"value="Java"checked="checked"/><label>Java</label><inputtype="checkbox"name="list"value=".Net"checked="checked"/><label>.Net</label><inputtype="checkbox"name="list"value="RoR"/><label>RoR</label><inputtype="checkbox"name="list"value="PHP"/><label>PHP</label>如果集合为Map<s:checkboxlistname="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}"listKey="key"listValue="value"value="{1,2,3}"/>生成如下html代码:<inputtype="checkbox"name="map"value="1"checked="checked"/><label>瑜珈用品</label><inputtype="checkbox"name="map"value="2"checked="checked"/><label>户外用品</label><inputtype="checkbox"name="map"value="3"checked="checked"/><label>球类</label><inputtype="checkbox"name="map"value="4"/><label>自行车</label>5.3.1UI标签--checkboxlist标签如果集合里存放的是JavaBean

<%Personperson1=newPerson(1,"第一个");Personperson2=newPerson(2,"第二个");List<Person>list=newArrayList<Person>();list.add(person1);list.add(person2);request.setAttribute("persons",list);

%><s:checkboxlistname="beans"list="#request.persons"listKey="personid"listValue="name"/>Personid和name为Person的属性生成如下html代码:<inputtype="checkbox"name=“beans"value="1"/><label>第一个</label><inputtype="checkbox"name=“beans"value="2"/><label>第二个</label>5.3.1UI标签--radio标签该标签的使用和checkboxlist复选框相同。如果集合里存放的是JavaBean(personid和name为Person的属性)<s:radioname="beans"list="#request.persons"listKey="personid"listValue="name"/>生成如下html代码:<inputtype="radio"name="beans"id="beans1"value="1"/><label>第一个</label><inputtype="radio"name="beans"id="beans2"value="2"/><label>第二个</label>如果集合为Map<s:radioname="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}"listKey="key"listValue="value“value="1"/>生成如下html代码:<inputtype="radio"name="map"id="map1"value="1"/><labelfor="map1">瑜珈用品</label><inputtype="radio"name="map"id="map2"value="2"/><labelfor="map2">户外用品</label><inputtype="radio"name="map"id="map3"value="3"/><labelfor="map3">球类</label><inputtype="radio"name="map"id="map4"value="4"/><labelfor="map4">自行车</label>如果集合为List<s:radioname="list"list="{'Java','.Net'}"value="'Java'"/>生成如下html代码:<inputtype="radio"name="list"checked="checked"value="Java"/><label>Java</label><inputtype="radio"name="list"value=".Net"/><label>.Net</label>5.3.1UI标签--select标签<s:selectname="list"list="{'Java','.Net'}"value="'Java'"/><selectname="list"id="list"><optionvalue="Java"selected="selected">Java</option><optionvalue=".Net">.Net</option></select><s:selectname="beans"list="#request.persons"listKey="personid"listValue="name"/><selectname="beans"id="beans"><optionvalue="1">第一个</option><optionvalue="2">第二个</option></select><s:selectname="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}"listKey="key"listValue="value"value="1"/><selectname="map"id="map"><optionvalue="1"selected="selected">瑜珈用品</option><optionvalue="2">户外用品</option><optionvalue="3">球类</option><opti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论