第三章 Struts标签与数据验证_第1页
第三章 Struts标签与数据验证_第2页
第三章 Struts标签与数据验证_第3页
第三章 Struts标签与数据验证_第4页
第三章 Struts标签与数据验证_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第三章Struts标签与数据验证上节回顾

Struts2中Action的配置Action的动态调用Action中如何访问ServletAPI对象Result的类型及配置主要内容Struts2标签库的使用

UI标签非UI标签

OGNL语言及使用OGNL如何访问对象

本讲目标Struts2标签库的使用

UI标签非UI标签

OGNL语言及使用Struts标签库简介Struts2提供了一套标签库,但是并没有像JSTL或者Struts1.x的标签库那样进行分类,所有Struts2的标签前缀都是以s开始如何在JSP页面引入Struts2标签库呢<%@taglibprefix="s"uri="/struts-tags"%>虽然struts2提供的标签库没有明确的分类,但是通常开发人员将Struts2的标签分为i两类UI标签非UI标签数据标签控制标签Struts2UI标签常用表单标签标签说明<s:form>…</s:form>表单标签<s:textfield>…</s:textfield>文本输入框<s:password>…</s:password>密码输入框<s:textarea>…</s:textarea>文本域输入框<s:radio>…</s:radio>单选按钮<s:checkbox>…</s:checkbox>多选框<s:submit/>提交标签<s:reset/>重置标签<s:hidden/>隐藏域标签Struts2UI标签表单标签使用:<s:formaction=“”method=“”namespace=“”>定义一个form表单域<s:textfieldkey=“”label=“”name=“”value=“”>定义一个文本框<s:passwordkey=“”label=“”name=“”value=“”>定义一个密码框<s:radioname=“”list=“”listKey=“”listValue=“”>定义一组单选按钮<s:selectlist=“”name=“”>选择框Struts2UI标签库表单元素<s:comboboxname=“”headerKey=“”headerValue=“”list=“”>主要是指一个下拉框和一个单行文本框的组合,它既允许用户直接在文本框中输入值,也允许用户从下拉列表中选择值<s:chekboxname=“”fieldvalue=“”value=“”>复选框,但是注意的时,该复选框提交的值要么为false要么为true<s:checkboxlistname=“”list=“”value=“”>修改struts.xml文件Struts2表单标签…<struts> <!--设置用户界面主题,默认值为xhtml风格-->

<constantname="struts.ui.theme"value="simple"/> <packagename="default"namespace="/"extends="struts-default"> <actionname="login"class="cn.jbit.strutsdemo.LoginAction"> <resultname="success">/success.jsp</result> <resultname="fail">/fail.jsp</result> </action> </package></struts>更改默认主题风格修改JSP页面Struts2表单标签<%@taglibprefix="s"uri="/struts-tags"%>…<s:formaction="/login.action"> <div>

用户名:

<s:textfieldname="username"/> </div> <div>

码:

<s:passwordname="password"/> </div> <inputtype="submit"value="提交"/></s:form> 必须导入Struts2标签库<%@taglibprefix="s"uri="/struts-tags"%>…<h1>

登录成功</h1><div>

欢迎您,

<s:propertyvalue="username"/>!</div> Struts2UI标签其他控件的使用日历控件Struts2也提供了日历控件的使用但是需要struts-dojo-plugin.jar的支持同时需要在JSP的头部引入<%@tagliburi="/struts-dojo-tags"prefix="sx"%>在JSP的<head></head>中使用<sx:head/><sx:datetimepickername=“”displayFormat=“”value=“”>Struts2非UI标签控制标签<s:iftest=“”><s:elseiftest=“”><s:if>test判断一个条件是否为true,为true执行标签体内的内容,否则不执行标签体内的内容Struts2非UI标签控制标签<s:iterator>迭代器标签被用来迭代一个值,这个值可以是java.util.Collection或java.util.Iterator中的任何一种。<s:iteratorvalue=“”var=“”status=“”end=“”start=“”>在<s:iterator>中,包含有一个“status”属性,它被用来声明一个IteratorStatus类的变量名。IteratorStatus类是用来获得有关迭代状态的信息的。支持的属性有index、count、first、last、odd、even等等Struts2非UI标签控制标签<s:sort>标签被用来使用java.util.Comparator对List进行排序。<s:sortcomparator=""></s:sort>Struts2非UI标签库创建一个比较器Struts2非UI标签控制标签<s:subset>标签被用来输出一个迭代器元素的子集合或一部分source待截取的集合start开始的位置count截取的个数Struts2非UI标签数据标签<s:set>标签被用来将一个值赋给一个特定作用域(application、session、request、page或action)的变量,action是默认作用域。<s:setvar=""scope=""value="">value设置的变量值var设置的变量名scope设置变量的范围Struts2非UI标签数据标签<s:bean>标签用来在JSP页面中实例化一个对象,其作用就像<jsp:userBean><s:beanname=“”var=“”>name需要实例化的Bean的完整类名var实例化后Bean对象的对象名可以通过<s:param>为实例化的bean传递参数,如:Struts2非UI标签数据标签<s:date>标签被用来以两种方式格式化Date对象:自定义日期格式(比如:“yyyy-MM-dd”);使用“nice”属性,用来将日期格式化为一种易读的符号,如“thisdateis162daysago”。<s:datename=“”format=“”nice=“”var=“”>注意format和nice只能选其中之一Struts2配置文件struts.xmlconstant元素配置常量,可以改变Struts2框架的一些行为name属性表示常量名称,value属性表示常量值 …<struts>

<constantname="struts.i18n.encoding"value="UTF-8"/>

<constantname="struts.ui.theme"value="simple"/>

<packagename=""namespace=""extends=""> <actionname=""class=""> <resultname=""></result> </action> </package></struts>Struts2配置文件struts-default.xml

Struts2默认配置文件,会自动加载struts-default包在struts-default.xml文件中定义struts-plugin.xml

Struts2插件使用的配置文件如果不开发插件,不需要编写该配置文件加载顺序struts-default.xml—>struts-plugin.xml —>struts.xml—>web.xmlStruts常量配置常量建议在struts.xml中配置因为常量可以在下面多个配置文件中进行定义,所以我们需要了解struts2加载常量的搜索顺序:struts-default.xmlstruts-plugin.xmlstruts.xmlpertiesweb.xml如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值.OGNL基础数据转移和类型转换开发Web应用程序中最常见的一个任务是从基于字符串的HTTP请求向Java语言的不同数据类型移动和转换数据数据转移和类型转换上发生在请求处理周期的两端Struts2提供了强大的数据转移和类型转换功能,由框架自动完成谁帮助Struts2提供了这个“魔力”??是OGNL!

OGNLOGNL ObjectGraphicNavigationLanguage对象导航图语言,是一个开源框架。取代页面中Java脚本,简化数据访问。和EL同属于表达式语言Struts2采用OGNL作为默认表达式语言与EL相比,OGNL提供了更为强大功能不仅仅可以访问对象的属性,也可以访问对象的方法支持静态方法和静态属性的访问操作集合对象OGNL的作用OGNL在Struts2中的作用表达式语言将表单或Struts2标签与特定的Java数据绑定起来,用来将数据移入、移出框架类型转换数据进入和流出框架,页面中数据的字符串版本和Java数据类型之间都发生转换OGNL基础OGNL上下文OGNL表达式的计算围绕OGNL上下文进行由ognl.OgnlContext类表示,实现了Map接口OGNL上下文中可以以键值对的形式包含多个对象,可以将其中一个指定为根对象访问根对象,直接书写对象的属性访问其他对象必须使用“#key”前缀OGNLStruts2中的OGNLContext实现者为ActionContext,它结构示意图如下:ValueStack(值栈,它是根对象)OGNLContextparametersrequestsessionapplicationattr当Struts2接受一个请求时,会迅速创建ActionContext,ValueStack,action。然后把action存放进ValueStack,所以action的实例变量可以被OGNL访问。OGNL访问上下文(Context)中的对象需要使用#符号标注命名空间,如#application、#session另外OGNL会设定一个根对象(root对象),在Struts2中根对象就是ValueStack(值栈)

。如果要访问根对象(即ValueStack)中对象的属性,则可以省略#命名空间,直接访问该对象的属性即可。在struts2中,根对象ValueStack的实现类为OgnlValueStack,该对象不是我们想像的只存放单个值,而是存放一组对象。在OgnlValueStack类里有一个List类型的root变量,就是使用他存放一组对象Struts2下使用OGNL访问非值栈对象非值栈对象访问方式等价访问方式application#application.username#application['username']application.getAttribute("username")session#session.username#session['username']session.getAttribute("userName")request#request.username#request['username']request.getAttribute("username")parameters#parameters.username#parameters['username']

request.getParameter("username")attr#attr.username#attr['username']按pageContext–>request–>session–>application顺序查找访问非值栈对象Struts2下使用OGNL<%-- request.setAttribute("age",10); session.setAttribute("username","jbit"); application.setAttribute("count",5); --%><s:setname="age"value="10"scope="request"/><s:setname="username"value="'jbit'"scope="session"/><s:setname="count"value="5"scope="application"/> #request.age:<s:propertyvalue="#request.age"/><br/>#session.username:<s:propertyvalue="#session.username"/><br/>#application.count:<s:propertyvalue="#application.count"/><br/>#attr.count:<s:propertyvalue="#attr.count"/><br/> ======================================<br><s:setname="country1"value="China"/> <s:setname="country2"value="'China'"/>#country1:<s:propertyvalue="#country1"/><br/>#country2:<s:propertyvalue="#country2"/><br/> #request.country2:<s:propertyvalue="#request.country2"/><br/> <s:set>标签将一个值赋给指定范围的变量<s:property>标签用于输出指定对象的属性值注意两者的区别访问非值栈对象Struts2下使用OGNL<html> ... <body> <s:setname="myurl"value="''"/> 1:<s:urlvalue="#myurl"/> <br> 2:<s:urlvalue="%{#myurl}"/><br> ========================================<br/> 3:<s:propertyvalue="#myurl"/><br/> 4:<s:propertyvalue="%{#myurl}"/><br> ========================================<br/> 5:<s:urlvalue=""/><br> 6:<s:urlvalue="''"/><br> </body></html>为避免出错,如果分不清一个属性值的类型是不是字符串类型的,可以直接加上%{...}OGNL |--request |--applicationContext|--OgnlValueStackroot变量[action,OgnlUtil,...] |--session |--attr |--parameters在root变量中处于第一位的对象叫栈顶对象。通常我们在OGNL表达式里直接写上属性的名称即可访问root变量里存放的对象的属性,搜索顺序是从栈顶对象开始寻找,如果栈顶对象不存在该属性,就会从第二个对象寻找,如果没有找到就从第三个对象寻找,依次往下访问,直到找到为止。

注意:Struts2中的OGNL需要在Struts2的标签中使用OGNL由于ValueStack(值栈)是Struts2中OGNL的根对象,如果用户需要访问值栈中的对象,在JSP页面可以直接通过下面的EL表达式访问ValueStack(值栈)中对象的属性:${foo}//获得值栈中某个对象的foo属性如果需要访问context中其他对象,需要在命名空间前加#parameters对象:用于访问HTTP中的请求参数,#parameters.pwdrequest对象:用于访问HttpServletRequest对象的属性session对象:用于访问HttpSession对象的属性,#session.userapplication对象:用于访问ServletContext对象的属性attr对象:用于按>request->session->application顺序访问属性OGNL使用OGNL创建集合对象如果需要一个集合元素的时候(例如List对象或者Map对象),可以使用OGNL中同集合相关的表达式。创建list对象<s:setname="list"value=“#{'zhangming','xiaoi','liming'}"/>创建Map对象<s:setname="foobar"value="#{'foo1':'bar1','foo2':'bar2'}"/>访问集合元素Struts2下使用OGNL<s:setname="list"value="{'ACCP','BENET','BETEST'}"/>#list[0]:<s:propertyvalue="#list[0]"/><br/>#list[2]:<s:propertyvalue="#list[2]"/><br/>#list.size:<s:propertyvalue="#list.size"/><br/>list-iterator:<s:iteratorvalue="#list"> <s:property/> </s:iterator>访问列表<s:setname="array"value="newint[]{1,2,3,4}"/>#array[0]:<s:propertyvalue="#array[0]"/><br/>#array[2]:<s:propertyvalue="

温馨提示

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

评论

0/150

提交评论