关闭

关闭

关闭

封号提示

内容

首页 第五章:struts2标签库.ppt

第五章:struts2标签库.ppt

第五章:struts2标签库.ppt

上传者: trkqytr 2011-10-10 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《第五章:struts2标签库ppt》,可适用于IT/计算机领域,主题内容包含第五章:Struts标签库主讲:刘雷第五章:Struts标签库主讲:刘雷学习目标学习目标Struts标签库概述Struts数据标签Struts控制标符等。

第五章:Struts标签库主讲:刘雷第五章:Struts标签库主讲:刘雷学习目标学习目标Struts标签库概述Struts数据标签Struts控制标签Struts表单标签Struts非表单标签Struts标签库概述Struts标签库概述Struts标签库的组成Struts框架的标签库可以分为以下三类:用户界面标签(UI标签):主要用来生成HTML元素的标签。表单标签:主要用于生成HTML页面的FORM元素以及普通表单元素的标签。非表单标签:主要用于生成页面上的treeTab页等。非用户界面标签(非UI标签):主要用于数据访问逻辑控制。数据访问标签:主要包含用于输出值栈(ValueStack)中的值完成国际化等功能的标签。流程控制标签:主要包含用于实现分支循环等流程控制的标签。AJAX标签:用于支持Ajax效果Struts标签库Struts标签库在早期的WEB开发中JSP视图控制和显示技术主要依靠Java脚本来实现这样一来JSP页面重新嵌入了大量的Java脚本代码给开发带来了极大的不方便。从JSP规范后JSP增加了自定义标签库的支持。标签库是一种组件技术通过标签库可以将复杂的Java脚本代码封装在组件中开发者只需要使用简单的代码就可以实现复杂的Java脚本功能。提供了Java脚本的复用性提高了开发者的开发效率。Struts标签库相对strutsx进行了巨大的改进支持OGNL表达式不再依赖任何表现层技术。Struts标签的使用Struts标签的使用我们可以在strutscorejar压缩文件的METAINF目录下找到strutstagstld文件这个文件里定义了Struts的标签。要在jsp中使用Struts的标志先要指明标志的引入。通过jsp的代码的顶部加入以下的代码:<taglibprefix="s"uri="strutstags">Struts标签语法(一)Struts标签语法(一)Struts的标签都支持动态数据的访问标签的属性都可以使用OGNL表达式struts标签的属性具有类型这些类型可以简单地分为字符串类型和非字符串类型对于字符串类型的属性如果要访问动态数据需要使用{…}这样的语法例如:<s:includevalue=“{url}”>Include标签的value属性是字符串类型Struts将对这个属性进行解析查找符合{…}样式的字符串然后将花括号之间的内容作为OGNL表达式进行求值。如果属性中没有{…}样式的字符串那么属性的值将被直接看成是字符串数据。例如:<s:includevalue=“urlTagaction”>对于非字符串类型的属性值将直接作为OGNL表达式进行求值。例如:<s:propertyvalue=“username”>property标签的value属性是Object类型它的值username将作为OGNL表达式进行求值结果是值栈中位于栈顶的对象的username属性的值。如果要为非字符串类型的属性直接指定字符串数据那么需要使用OGNL中的字符串常量即用单引号(‘)或双引号(“)将字符串括起来。例如:<s:propertyvalue=“’zhangsan‘”>value属性的值‘zhangsan’作为字符串常量计算结果就是zhangsan因此输出zhangsan。Struts标签语法(二)Struts标签语法(二)除上述用法之外也可以使用{…}这样的语法来指定字符串常量。例如:<s:propertyvalue=“{‘zhangsan’}”>在这种情况下{}将被忽略花括号中的内容将作为表达式被计算。总结一下struts标签的属性按照下列的三个规则进行计算。()所有的字符串属性类型都会解析“{…}”这样的语法。()所有的非字符属性类型都不会被解析而是直接被看作一个OGNL表达式进行求值()对于第二个规则的例外情况是如果非字符串属性使用了“{…}”语法那么{…}将被忽略花括号中的内容将作为表达式计算。如果大家在使用标签时忘记了某个属性是字符串类型还是非字符串类型那么有一个简单的方法那就是不考虑它是什么类型统一使用“{…}”语法。Struts通用标签Struts通用标签Struts中通用标签可以分为二类:控制标签和数据标签。控制标签用于呈现页面时控制执行流程数据标签用于访问值栈中的数据。数据标签:用于访问ActionContext和值栈中的数据。数据标签包括:propertysetpushparambeanactionincludeurlaintextdatedebug控制标签:用于在呈现结果页面时控制程序的执行流程根据程序执行的状态输出不同的结果控制标签包括下列标签:ifelseifelseiteratorappendmergegeneratorsubsetsort数据标签property标签数据标签property标签property标签用于输出值栈中的对象的属性(property)值使用value属性来指定要输出的对象属性如果没有指定value属性那么默认输出栈顶对象。property标签属性在前面的章节中我们已经使用过了property标签我们再看一个例子:<s:propertyvalue=“username”default=“游客”>取出栈顶对象(通常是action)的username属性并输出如果没有找到username属性那么输出”游客”。数据标签set标签数据标签set标签Set标签将一个值赋给指定范围内变量。Set标签在某些情况下是比较有用的例如在页面中多次引用一个复杂的表达式我们可以将这个表达式赋给一个变量然后直接引用变量。带来的好处就是:提升了性能(表达式的计算只有一次)提高了代码的可读性。set标签属性Set标签以name属性的值作为键(key)将value属性的值保存到指定的范围对象中。属性scope取值中的page,request,session,application同JSP的种范围如果指定了action范围(默认值)value属性的值将被同时保存到request范围和OgnlContext中。示例:访问地址:http:localhost:setTagaction数据标签push标签数据标签push标签push标签用于把一个值压入值栈(位于栈顶)注意和set标签的区别set标签是将值放到action上下文中。当push标签结束后push标签放入值栈中的对象将被删除换句话说要访问push标签压入栈中的对象需要在标签内部去访问。push标签的属性publicclassUser{privateStringusernameprivateStringemailprivateStringsex省略setget方法}Push标签示例Push标签示例访问:http:localhost:pushTagaction数据标签param标签数据标签param标签param标签被用作其他标签的子标签用于为其他标签提供参数例如:为bean标签和include标签提供参数。param标签的属性当使用param标签时参数的值可以通过value属性给出也可以在标签体中给出(开始标签和结束标签之间的文本)。这二种用法有一些区别。我们看下面的例子:<paramname=“color”>blue<param><!()><paramname=“color”value=“blue”><!()>在第()种情形中参数值将作为javalangString对象(即字符串)被放入栈中在第()种情形中参数值将作为表达式进行计算如果blue不存在则color参数的值为。在第()种情形中要为color指定字符串值可以写为:<paramname=“color”value=“‘blue‘”>或者<paramname=“color”value=“{‘blue‘}“>使用单引号包围字符串表明这是一个字符串常量数据标签bean标签数据标签bean标签bean标签用于实例化一个JavaBean对象(必须遵照JavaBean规范)bean标签的标签体内可以包含多个param标签用于设置Bean的属性(必须有相应的setter方法)。如果指定了id属性则创建的Bean实例将被放入到OgnlContext中。bean标签的属性注意:id属性是可选的无论是否指定id属性bean标签创建的JavaBean实例都会被压入到值栈的顶部在bean标签内部可以直接访问创建的对象无须使用”#”标记当bean标签结束的时候bean标签创建的实例将从值栈中删除。如果指定了id属性那么bean标签创建的JavaBean实例还将被放到OgnlContext中这样在bean标签的外部也可以访问创建的对象了不过此时就要使用”#”标记了。bean标签示例bean标签示例bean标签示例说明bean标签示例说明在没有指定id属性的情况下创建的User对象只被压入值栈在bean标签的内部使用property标签可以直接访问User对象的属性。在bean标签外部由于值栈中的User对象已被删除所以无法访问到User对象的属性了。在指定了id属性的情况下创建的User对象除了被放到值栈中外还被放到action上下文中因此在标签的内部和外部都可以访问User对象属性只不过在标签外部访问时需要添加#user前缀,访问路径:http:localhost:beanTagaction数据标签action标签数据标签action标签通过指定action的名字和可选的名称空间action标签允许你在JSP中直接调用action。如果将标签的excuteResult属性设为true,那么action对应的结果输出也将被包含到本页面中。在action标签的标签体中可以嵌套param标签向action传递参数。action标签的属性如果指定了id属性则action将被放到OgnlContext中在action标签结束后可以通过#id来引用actionActionTagActionjavaActionTagActionjavaactionTagSuccessjspactionTagjspactionTagjsp示例说明示例说明在第一个action标签调用中执行了结果但没有设置ActiontagAction的username和email属性所以结果页面中的这两项输出为空。在第二个action标签调用中不执行结果调用ActionTagAction的doDefault()方法在这个方法中我们在请求对象中设置了greeting属性在页面中使用property标签通过表达式#attrgreeting来获取greeting属性。在第三个action标签调用中执行了结果并通过param标签设置了ActionTagAction的username和email属性在结果页面中通过property标签输出这两个属性的值。访问路径:http:localhost:actionTagjsp数据标签include标签数据标签include标签include标签类似于JSP的<jsp:include>标签用于包含一个Servlet或JSP页面。include标签的标签体内可以包含多个param标签用于向被包含的页面传递请求参数include标签的属性include标签示例说明include标签示例说明在jspjsp中我们使用JSP的EL表达式来获取传的请求参数。注意:在include标签内部使用param标签向被包含的页面传递的请求参数不能使用如下的property标签来访问:<s:propertyvalue=“#parametersusername”>#parameters引用的实质是一个Map对象并不等同于HttpServletRequest对象。在包含页面时如果页面中有中文将会出现乱码要解决这个问题可以在strutsxml文件中配置strutsinencoding属性如下:<constantname=“strutsinencoding”value=“gbk”>访问路径:http:localhost:includeTagjsp数据标签in和text标签数据标签in和text标签in和text标签用于对国际化提供支持in标签用于将一个资源包放入值栈text标签用于从资源包中获取消息。例如<s:inname=“ApplicationResources”><s:textname=“title”><s:in>in标签将基名为ApplicationResources的资源包放入到值栈中text标签从资源包中获取键为title的文本消息。注意:in标签放入值栈的资源包只能在in标签的标签体内访问一旦in标签结束值栈中的资源包将被删除。text标签也可以单独使用在这种情况下它将首先查找资源包的基名与调用的Action类名相同的资源包。这意味着你可以在Action类所在的包中创建与Action类名相同的资源文件例如:在comibmaction包中有一个名为LoginAction的类你可以在comibmaction包括中创建名为LoginActionproperties、LoginActionzhproperties、LoginActionenproperties等资源文件(名字中的LoginAction部分称为基名)当执行完LoginAction后在转向的结果页面中使用单独的text标签获取本地化的文本消息那么text标签将从comibmactionLoginActionxxproperties(根据当前的语言环境选择某个资源文件)中读取name属性值对应的文本消息。数据标签in和text标签数据标签in和text标签如果找不到与Action类名相同的资源包那么就从默认资源包中获取消息如果默认资源包不存在或者默认资源包中也没有找到对应的消息那么text标签的标签体内容将作为默认消息被输出如果没有标签体那么name属性的值将直接被输出。text标签内部还可以使用嵌套的param标签来指定消息文本中的参数param标签的顺序对应了消息文本中参数的索引顺序。in标签的属性text标签的属性in和text标签示例in和text标签示例第一步在项目的src下新建包:comibmaction,在这个包中新建TextTagAction类继承自ActionSupport类注意:你的Action类一定要继承ActionSupport类因为ActionSupport类对国际化提供了支持这样text标签才能访问到资源包的基名与你的Action类名相同的资源包。TextAction类没有任何代码这主要是因为ActionSupport基类已经实现了execute()方法该方法返回ActionSUCCESS,这就足够了我们编写TextAction类的目的是为了通过这个Action来访问使用了text标签的结果页面。in和text标签示例in和text标签示例第二步在comibmaction包中新建TextTagActionproperties,内容如下:username=lisiemail=lisicomnow=Nowis{}{},welcomeyou键为now的消息有两个参数分别用{}和{}来表示。第三步新建ApplicationResourcesproperties,内容如下:username=zhangsanemail=zhangsansinacomin和text标签示例in和text标签示例第四步数据标签date标签数据标签date标签date标签用于格式化输出日期值也可用于输出当前日期值与指定日期值之间的时差date标签的属性注意:、format属性用于指定日期的格式化样式具体的样式规则可以参看javatextSimpleDateFormat类的API文档。、将nice属性设为true可以输出指定日期值和当前日期值之间的时差此时format属性失效也就是说当nice属性为true时即使你指定了format属性它也不会起作用、如果没有使用nice属性也没有指定format属性那么date标签将会在国际化资源包中查找strutsdateformat键并以这个键的值作为日期的格式化样式如果这个键不存在那么默认将会使用DateFormatMEDIUM格式化样式。、如果找不到name属性指定的Date对象那么将返回空。date标签示例date标签示例第一步在ApplicationResourcesproperties文件中添加strutsdateformat键strutsdateformat=yyyyMMddhh:mm:ss第二步、可以使用struts的strutscustominresources属性来设置默认的资源包编辑strutsxml文件使用constant元素来配置strutscustominresources属性内容如下<constantname=“strutscustominresources”value=“ApplicationResources”>测试:http:localhost:dateTagjsp测试:http:localhost:dateTagjsp第三步控制标签控制标签控制标签用于完成流程控制例如分支循环等操作。控制标签包含下面几个:if:用于控制选择输出。elseif:同if标签结合使用用来控制选择输出。else:同if标签结合使用用来控制选择输出。append:用来将多个集合拼接为一个新的集合。generator:为一个字符串解析器用来将一个字符串解析为一个集合。iterator:迭代器用来迭代输出集合数据。merge:用来将多个集合拼接为一个新的集合,同append有所区别。sort:用来对集合排序。subset:用来截取集合的部分集合开成新的集合子集合。控制标签ifelseifelse标签控制标签ifelseifelse标签ifelseif标签属性test:为必填属性是一个Boolean类型值决定是否显示if标签内容。该标签标准格式如下:<s:iftest=“表达式”>……<s:if><s:elseiftest=“表达式”>……<s:elseif><s:else>………<s:else>控制标签ifelseifelse标签举例控制标签ifelseifelse标签举例<taglibprefix="s"uri="strutstags"><!定义一个testname属性><s:setname="testname"value="{'Java'}"><!使用if标签判断><s:iftest="{#testname=='Java'}"><div><s:propertyvalue="{#testname}"><div><s:if><s:elseiftest="{#testname=='Jav'}"><div><s:propertyvalue="{#testname}"><div><s:elseif><s:else><div>testname不是“Java”<div><s:else>控制标签ifelseifelse标签举例控制标签ifelseifelse标签举例<taglibprefix="s"uri="strutstags"><s:setname="age"value=""><s:iftest="${age>}">   老年人<s:if><s:elseiftest="${age>}">   中年人<s:elseif><s:elseiftest="${age>}"id="wawa">   青年人<s:elseif><s:else>   少年<s:else>控制标签ifelseifelse标签举例控制标签ifelseifelse标签举例<taglibprefix="s"uri="strutstags"><s:setname="name"value="<="'"requestgetParameter("name")"'">">< Systemoutprintln(requestgetParameter("name")) ><s:iftest="#name=='zhaosoft'"> zhaosofthere<s:if><s:elseiftest="#name=='zxl'"> zxlhere<s:elseif><s:else> otherishere<s:else>控制标签iterator(迭代标签)控制标签iterator(迭代标签)Iterator(迭代)描述:用于遍历集合(javautilCollection)List,Map,数组或枚举值(javautiliterator)。该标签的属性如下表:IteratorStauts实例包含方法IteratorStauts实例包含方法intgetCount():返回当前迭代过元素的总数。intgetIndex():返回当前迭代元素的索引。booleanisEven():判断当前迭元素是否为偶数。booleanisOdd():判断当前迭元素是否为奇数。booleanisFirst():判断当前迭元素是否为第一个元素。booleanisLast():判断当前迭元素是否为最后一个元素IteratorStauts的这些方法分别对应了count,index,even,odd,first,last属性控制标签iterator标签示例控制标签iterator标签示例控制标签iterator(迭代标签)举例控制标签iterator(迭代标签)举例<s:iteratorvalue="{'第一个元素','第二个元素'}"><p>dayis:<s:property><p><s:iterator>privateListmyListprivateMapmyMappublicStringexecute()throwsException{myList=newArrayList()myListadd("第一个元素")myListadd("第二个元素")myListadd("第三个元素")myMap=newHashMap()myMapput("key","第一个元素")myMapput("key","第二个元素")myMapput("key","第三个元素")returnSUCCESS}省略生成settergetter方法<table><s:iteratorvalue="{'第一个元素','第二个元素'}"status="st"><tr><td><s:propertyvalue="#stgetIndex()"><td><td><s:property><td><tr><s:iterator><table><h>显示List属性<h><table><s:iteratorvalue="myList"status="st"><tr><td><s:propertyvalue="#stgetIndex()"><td><td><s:property><td><tr><s:iterator><table><h>显示Map<h><table><s:iteratorvalue="#{'key':'第一个元素','key':'第二个元素'}"status="st"><tr><td><s:propertyvalue="#stgetIndex()"><td><td><s:property><td><tr><s:iterator><table><h>显示Map属性<h><table><s:iteratorvalue="myMap"status="st"><tr><td><s:propertyvalue="#stgetIndex()"><td><td><s:property><td><tr><s:iterator><table>控制标签append标签控制标签append标签append:用来将多个集合拼接为一个新的集合。这样拼接的目的就是可以将多个集合使用一个<iterator>标签完成迭代。标签属性id:指定了集合元素的ID。privateListmyList,myListprivateMapmyMap,myMappublicStringexecute()throwsException{myList=newArrayList()myList=newArrayList()myListadd("第一个集合#第一个元素")myListadd("第一个集合#第二个元素")myListadd("第一个集合#第三个元素")myListadd("第二个集合#第一个元素")myListadd("第二个集合#第二个元素")myListadd("第二个集合#第三个元素")myMap=newHashMap()myMap=newHashMap()myMapput("key","第一个集合#第一个元素")myMapput("key","第一个集合#第二个元素")myMapput("key","第一个集合#第三个元素")myMapput("key","第二个集合#第一个元素")myMapput("key","第二个集合#第二个元素")myMapput("key","第二个集合#第三个元素")returnSUCCESS}省略settergetter方法<h><spanstyle="backgroundcolor:#FFFFcc">Append标签示例<span><h><h>拼接List属性<h><table><s:appendid="newList"><s:paramvalue="myList"><s:paramvalue="myList"><s:append><s:iteratorvalue="#newList"id="name"status="st"><tr><td><s:propertyvalue="#stgetIndex()"><td><td><s:property><td><tr><s:iterator><table><h>拼接Map属性<h><table><s:appendid="newMap"><s:paramvalue="myMap"><s:paramvalue="myMap"><s:append><s:iteratorvalue="#newMap"status="st"><tr><td><s:propertyvalue="#stgetIndex()"><td><td><s:property><td><tr><s:iterator><table>控制标签generator标签控制标签generator标签generator标签用来将指定的字符串按规定的分隔符分解为多个子字符串生成的多个子字符串可以使用iterator标签输出。该标签的属性如下:id:指定了集合元素的ID。count:可选属性为一个Integer类型值指定生成集合中元素的总数。separator:必填属性为一个String类型值指定用来分解字符串的分隔符。val:必填属性为一个String类型值指定被分解的字符串。converter:可选属性为一个Converter类型实例指定一个转换器该转换器负责将集合中的每个字符串转换为对象。控制标签generator标签举例控制标签generator标签举例privateStringmsgpublicStringgetMsg(){returnmsg}publicvoidsetMsg(Stringmsg){thismsg=msg}publicStringexecute()throwsException{setMsg("第一个元素第二个元素第三个元素")returnSUCCESS}控制标签generator标签举例控制标签generator标签举例<h><spanstyle="backgroundcolor:#FFFFCC">Generator标签示例<span><h><table><s:generatorseparator=""val="msg"id="temp"count=""><s:generator><s:iteratorstatus="st"value="#attrtemp"><tr><td><s:propertyvalue="#stgetIndex()"><td><td><s:property><td><tr><s:iterator><table>注意:如果在generator标签中指定了count属性则该集合中最多只能有count个元素多余的元素将会被忽略。控制标签append标签控制标签append标签append:用来将多个集合拼接为一个新的集合。控制标签merge标签控制标签merge标签Merge标签用于合并迭代器其用法与append相似区别就是对合并后的迭代器中的元素迭代的顺序不一样。控制标签subset标签控制标签subset标签Subset标签用于截取一个迭代器的子集其内部实现是通过orgapachestrutsutilSubsetIteratorFilter类来完成的。Subset标签示例Subset标签示例subset标签示例subset标签示例除了上面的用法之外还可以使用subset属性指定一个Decider用于过滤某些元素。要编写一个Decider类需要实现orgapachestrutsutilSubsetIteratorFilterDecider接口该接口只有一个方法publicbooleandecide(Objectelement)throwException,如果该方法返回true表明参数element表示的元素应该被包含到子集中。我们编写一个Decider类选取集合中含有“java”子串的元素代码如下:首先使用bean标签实例化MyDecider对象并将这个对象放入到OgnlContext中。在subset标签的decider属性中通过OGNL表达式#myDecider来引用MyDecider对象。控制标签sort标签控制标签sort标签Sort标签根据comparator属性指定的比较器对集合进行排序并将排序后的迭代器压入值栈的栈顶。在sort标签的内部你可以使用iterator标签取出栈顶的迭代器对排序后的元素进行迭代。当sort标签结束时栈顶的迭代器将被删除。sort标签示例sort标签示例表单标签表单标签Struts的表单标签可以分为两类form标签本身和包装HTML表单元素的其他标签。form标签本身的行为不同于它内部的元素。Struts表单标签包括下列标签:formtextfieldpasswordradiocheckboxcheckboxlistselectdoubleselectcomboboxoptiontransferselectoptgroupupdownselecttextareahiddenfilelabelresetsubmittokenhead表单标签表单标签表单标签的name和value属性表单标签的name和value属性很多表单标签(form标签除外)的name属性和value属性之间存在一个独特的关系。name属性除了为HTML表单元素指定名字在表单提交时作为请求参数的名字外同时它还映射到Action的属性。在大多数情况下name属性映射到一个简单的JavaBean属性例如name属性的值为”postalCode”,在表单提交后struts框架将会调用Action的setPostalCode()方法来设置属性。有的时候你希望在表单元素中显示Action属性的数据这时就轮到value属性登场了为value属性指定表达式”{postalCode}”,这将会调用Action的getPostalCode()方法并在表单中显示返回的数据之后用户可以编辑这个值然后重新提交它。form标签form标签form标签输出一个HTML输入表单此外xhtml主题的form标签还输出表单元素外围的表格。)通常情况下当前输出表单的请求和提交表单的请求属于同一个命名空间。例如:请求adminupdateCategory!defaultaction输出的表单命名空间会被假设为admin因此在使用form标签时可以不使用namespace属性。如下:<s:formaction=“updateCategory”>如果输出表单的请求和提交表单的请求分属于不同的名称空间那么可以通过namespace属性指定处理表单提交的action所属的名称空间。)若通过action的一个非execute方法输出表单然后将表单提交给action默认的execute方法执行那么form标签的action属性可以忽略。例如:对于下面的表单:<s:form><s:textfieldname=“username”label=“用户名”><s:submit><s:form>当访问register!defaultaction时输出上表单form标签会自动将action属性设为register这样在表单提交后就会执行action的execute方法。)method和enctype是HTMLform标签的属性。)当使用验证框架时将form标签的validate属性设为true将自动生成客户端的JavaScript验证代码。<s:formaction=“register”method=“post”>struts默认的主题是xhtml,上述代码在客户端浏览器中的输出如下:<s:formid=“register”onsubmit=“returntrue”action=“register”method=“post”><tableclass=“wwFormTable”><table><s:form>可以看到form标签内部输出了一个table元素。textfield标签textfield标签textfield标签输出一个HTML单行文本输入控件等价于HTML代码:<inputtype=“text”…>看下面的代码:<s:formaction=“register”method=“post”><s:textfieldname=“username”label=“用户名”><s:form>password标签password标签password标签输出一个HTML口令输入控件等价于HTML代码:<inputtype=“password”>例子:<s:passwordname=“password”label=“密码”>textarea标签textarea标签textarea标签输出一个HTML多行文本输入控件等价于HTML代码:<textarea…>例子:<s:textareaname=“personal”cols=“”rows=“”label=“个人简历”>select标签select标签select标签输出一个HTML列表框等价于HTML代码:<select…><option><option><select>select标签示例select标签示例示例一:<s:form><s:selectlabel=“最高学历”name=“education”list=“{‘高中’‘大学’‘硕士’}”><s:form>在select标签的list属性中直接使用OGNL表达式创建了一个列表列表中的每一项都将作为HTML列表框的一个选项。示例二:<s:form><s:selectlabel=“最高学历”name=“education”list=“#{:‘高中’:‘大学’:‘硕士’}”><s:form>在select标签的list属性中直接使用OGNL表达式创建了一个Map。在这里要注意的是Map的key是作为列表框选项的值而Map中的value是作为列表框选项的内容。select标签示例select标签示例示例三:<s:form><s:selectlabel=“最高学历”name=“education”list=“{‘高中’‘大学’‘硕士’}”headerKey=“”headerValue=“请选择你的学历”>Header选项主要用来越提示作用因此应该将header选项的值(通过headerKey属性设置)设为无意义的值例如此处的示例四:<s:form><s:selectlabel=“最高学历”name=“education”list=“{‘高中’‘大学’‘硕士’}”headerKey=“”headerValue=“请选择你的学历”emptyOption=“true”multiple=“true”>使用emptyOption属性在header选项后添加一个空的选项。multiple属性设为false则只能从下拉列表中选择一个选项如果设为true则可以多选。optgroup标签optgroup标签optgroup标签作为select标签的子标签使用用于创建选项组。你可以在select标签的标签体中使用一个或者多个optgroup标签对选项进行逻辑分组。注意optgroup标签本身不能嵌套。例子:<taglibprefix=“s”uri=“strutstags”><s:form><s:selectlabel="选择图书"name="book"list="#{:'JAVA核心编程',:'深入struts学习'}"><s:optgrouplabel="CC图书"list="#{:'VC编程详解',:'Spring详解'}"><s:optgrouplabel="Oracle图书"list="#{:'Oracle基础',:'DBA入门'}"><s:select><s:form>optgroup标签注意optgroup标签注意optgroup标签的label属性指定选项组的组名。optgroup标签对应的模板需要使用listKey和listValue属性的值因此你要么为list属性指定一个Map类型的值(此时listKey默认为MapEntry的keylistValue默认为MapEntry的value)要么为list属性指定一个对象列表然后使用listKey和listValue属性指定对象的属性作为选项的值和内容。radio标签radio标签radio标签输出一组HTML单选按钮等价于一组HTML代码:<inputtype=“radio”…>例子:<taglibprefix="s"uri="strutstags"><s:form><s:radioname="usersex"value=""list="#{:'男',:'女'}"label="性别"><s:form>checkbox标签checkbox标签checkbox标签输出一个HTML复选框等价于代码:<inputtype=“checkbox”…>checkbox标签创建一个value属性为true或者为false的复选框。你可以通过checkbox标签的fieldValue属性来指定创建的HTML复选框value属性的值。我们看下面的代码:<s:checkboxname=“userusername”label=“是否显示Email”fieldValue=“true”>复选框的值是true还是false是由fieldValue属性来控制的而不是由通常的value属性来设置的。注意除非你知道你要做什么否则不要将fieldValue属性设置为false。将fieldValue属性设置为false可能会导致一些问题。HTML规范规定复选框只有在选中时才会被提交在通常的ServletJSP处理过程中我们可以通过判断复选框的name属性所指定的请求参数是否存在来获知用户是否选中了复选框如果选中则取出它的值。然而在使用struts框架时这一切发生了一些微妙的变化。如果将fieldValue属性设置为false那么复选框的值将是false。当没有选中复选框时提交的请求参数中不会有复选框对应的请求参数。不过虽然struts框架没有接收到这个请求参数但它仍然会将复选框对应的action属性的值设为false。于是你就会看到一个奇怪的现象那就是不管你是否选中复选框对应的action属性的值都是falsecheckboxlist标签checkboxlist标签checkboxlist标签使用一个列表创建一系列复选框属性设置与<s:select>和<s:radio>类似只是创建的是HTML复选框。不同的是checkboxlist标签是多选标签。示例:<s:form><s:checkboxlistname="interest"list="{'足球','篮球','排球','游泳'}"label="兴趣爱好"><s:form>hidden标签hidden标签hidden标签输出一个HTML隐藏表单元素等价于HTML代码:<inputtype=“hidden”…>在xhtml主题下hidden标签与其它的标签不太一样hidden标签并不输出表行。xhtml主题直接从simple主题继承了hiddenftl模板。除了公共属性外hidden标签没有特有的属性。示例:<s:hiddenname=“id”value=“”>submit标签submit标签submit标签输出一个提交按钮。submit标签和form标签一起使用可以提供异步表单提交功能。submit标签可以输出以下三种类型的提交按钮。input:等价于HTML代码<inputtype=“submit”…>image:等价于HTML代码<inputtype=“image”…>button:等价于HTML代码<inputt

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/85
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部