struts2课件5-转换器.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Struts2第五课转换器讲师:李玉明背景开发Web应用程序与开发传统桌面应用程序不同,Web应用程序实际上是分布个不同的主机(当然也可以同一个主机,不过比较少见)上的两个进程之间互交。这种互交建立在HTTP之上,它们互相传递是都是字符串。服务器可以的接收到的来自用户的数据只能是字符串或字符数组,而在服务器上的对象中,这些数据往往有多种不同的类型,如日期(Date),整数(int),浮点数(float)或自定义类型(UDT)等。因此,我们需要服务器端将字符串转换为适合的类型。背景同样的问题也发生在使用UI展示服务器数据的情况。HTML的Form控件不同于桌面应用程序可以表示对象,其值只能为字符串类型,所以我们需要通过某种方式将特定对象转换成字符串。HelloWorld.javapackagei18n;importjava.util.Locale;importcom.opensymphony.xwork2.ActionSupport;importcom.opensymphony.xwork2.util.LocalizedTextUtil;publicclassHelloWorldextendsActionSupport{privateStringmsg;privateLocaleloc=Locale.US;publicStringgetMsg(){returnmsg;}publicLocalegetLoc(){returnloc;}publicvoidsetLoc(Localeloc){this.loc=loc;}@OverridepublicStringexecute(){msg=LocalizedTextUtil.findDefaultText(HelloWorld,loc);returnSUCCESS;}}Struts.xmlactionname=i18nHelloWorldclass=“i18n.HelloWorldresulti18nHelloWorld.jsp/result/actioni18nHelloWorld.jsp%@pagelanguage=javacontentType=text/html;charset=UTF-8%%@taglibprefix=suri=/struts-tags%htmlheadmetahttp-equiv=Content-Typecontent=text/html;charset=UTF-8titlei18nHelloWorld/title/headbodys:formaction=“i18nHelloWorldtheme=simpleLocale:s:textfieldname=loc/ s:submit//s:formh2s:propertyvalue=msg//h2/body/htmlLocaleConverter.javapackagei18n;importjava.util.Locale;importjava.util.Map;publicclassLocaleConverterextendsognl.DefaultTypeConverter{@OverridepublicObjectconvertValue(Mapcontext,Objectvalue,ClasstoType){if(toType==Locale.class){Stringlocale=((String[])value)[0];returnnewLocale(locale.substring(0,2),locale.substring(3));}elseif(toType==String.class){Localelocale=(Locale)value;returnlocale.toString();}returnnull;}}xwork-conversion.propertiesjava.util.Locale=i18n.LocaleConverter测试在Locale输入框中输入“zh_CN”,按“Submit”提交:ConverterStruts2.0中的转换器都必须实现ognl.TypeConverter接口。OGNL包提供了ognl.DefaultTypeConverter类帮助实现转换器。在例子中,LocaleConverter继承了ognl.DefaultTypeConverter,重载了其方法原型为“publicObjectconvertValue(Mapcontext,Objectvalue,ClasstoType)”的方法。函数的参数:•context——用于获取当前的ActionContext•value——需要转换的值•toType——需要转换成的目标类型转换器配置配置全局的类型转换器:在src文件夹下,新建一个名为“xwork-conversion.properties”的配置文件,并在文件中加入“待转换的类型的全名(包括包路径和类名)=转换器类的全名”对;应用于某个特定类的类型转换器:在该类的包中添加一个格式为“类名-conversion.properties”的配置文件,并在文件中加入“待转换的属性的名字=转换器类的全名”对。•上例可这样配置——在源代码文件夹的tutorial包下新建名为“HelloWorld-conversion.properties”文件,并在其中加入“loc=tutorial.LocaleConverter”。已有的转换器预定义类型,例如int、boolean、double等;日期类型,使用当前区域(Locale)的短格式转换,即DateFormat.getInstance(DateFormat.SHORT);集合(Collection)类型,将request.getParameterValues(Stringarg)返回的字符串数据与java.util.Collection转换;集合(Set)类型,与List的转换相似,去掉相同的值;数组(Array)类型,将字符串数组的每一个元素转换成特定的类型,并组成一个数组。批量封装对象(Bean)publicclassProduct{privateStringname;privatedoubleprice;privateDatedateOfProduction;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicdoublegetPrice(){returnprice;}publicvoidsetPrice(doubleprice){this.price=price;}publicDategetDateOfProduction(){returndateOfProduction;}publicvoidsetDateOfProduction(DatedateOfProduction){this.dateOfProduction=dateOfProduction;}}ProductConfirm.javapackagei18n;importjava.util.List;importcom.opensymphony.xwork2.ActionSupport;publicclassProductConfirmextendsActionSupport{publicListProductproducts;publicListProductgetProducts(){returnproducts;}publicvoidsetProducts(ListProductproducts){this.products=products;}@OverridepublicStringexecute(){for(Productp:products){System.out.println(p.getName()+|+p.getPrice()+|+p.getDateOfProduction());}returnSUCCESS;}}在i18n包下:ProductConfirm-conversion.propertiesproducts=i18n.Productstruts.xmlactionname=ProductConfirmclass=i18n.ProductConfirmresultShowProducts.jsp/result/actionAddProducts.jsp%@pagelanguage=javacontentType=text/html;charset=UTF-8%%@taglibprefix=suri=/struts-tags%htmlheadtitleAddProduct/title/headbodys:formaction=ProductConfirmtheme=simpletabletrstyle=background-color:powderblue;font-weight:bold;tdProductName/tdtdPrice/tdtdDateofproduction/td/trs:iteratorvalue=newint[3]status=stattrtds:textfieldname=%{'products['+#stat.index+'].name'}//tdtds:textfieldname=%{'products['+#stat.index+'].price'}//tdtds:textfieldname=%{'products['+#stat.index+'].dateOfProduction'}//td/tr/s:iteratortrtdcolspan=3s:submit//td/tr/table/s:form/body/htmlShowProducts.jsp%@pagelanguage=javacontentType=text/html;charset=UTF-8%%@taglibprefix=suri=/struts-tags%htmlheadtitleShowProducts/title/headbodytabletrstyle=background-color:powderblue;font-weight:bold;tdProductName/tdtdPrice/tdtdDateofproduction/td/trs:iteratorvalue=productsstatus=stattrtds:propertyvalue=name//tdtd$s:propertyvalue=price//tdtds:propertyvalue=dateOfProduction//td/tr/s:iterator/table/body/html测试转换错误处理在源代码文件夹下的struts.xml中的ProductConfirmAction中加入以下代码:•resultname=inputAddProducts.jsp/result在页面上加上错误提示信息在AddProducts.jsp的“body”后,加入下面代码可以实现:•divstyle=color:red•s:fielderror/•/div说明以上功能是通过Struts2.0里的一个名为conversionError的拦截器(intercepto

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功