(客户管理)使用A实现本地化后的客户端消息验证

上传人:m**** 文档编号:129475438 上传时间:2022-08-03 格式:DOCX 页数:15 大小:52.74KB
收藏 版权申诉 举报 下载
(客户管理)使用A实现本地化后的客户端消息验证_第1页
第1页 / 共15页
(客户管理)使用A实现本地化后的客户端消息验证_第2页
第2页 / 共15页
(客户管理)使用A实现本地化后的客户端消息验证_第3页
第3页 / 共15页
资源描述:

《(客户管理)使用A实现本地化后的客户端消息验证》由会员分享,可在线阅读,更多相关《(客户管理)使用A实现本地化后的客户端消息验证(15页珍藏版)》请在装配图网上搜索。

1、(客户管理)使用A实现本地化后的客户端消息验证20XX年XX月峯年的企业咨询咸问经验.经过实战验证可以藩地执行的卓越萱理方案.值得您下载拥有简介于构建壹个能影响全球用户的Web应用程序时,有俩点需要考虑。第壹点是需要呈现本地化后的页面内容,第二点是验证用户输入以及本地化后的验证消息显示。使用资源包(特定于本地语言环境的属性文件)于服务器端构建此页面的本地化版本很容易。同样地,也能够使用服务器端验证来显示本地化后的验证消息。对于国际化而言,有很多具备良好支持的现成框架可用,比如JakartaStruts、Spring、Tapestry和Freemarker。不过,于几乎所有的这类框架内,均缺少对

2、于客户端验证本地化消息的现成支持。如果验证是于客户端进行的,将很难显示本地化后的验证消息。通过于构建页面时提前处理整个页面(包括静态内容和必要的JavaScript验证消息)或从特定于本地语言环境的资源包解析出消息键,能够显示这些消息。不过,上述方式具有壹个暗含的限制:整个JavaScript验证逻辑均应于JavaServerPage(JSP)本身内编写以便基于Java?的消息键解析逻辑可被重用。不要忘记,JavaScript通常均是由页面设计人员编写的,而这些设计人员且不壹定同时也掌握Java的开发技术。混合Java代码和JavaScript可能会让Web应用程序的开发和维护复杂化。联合使用

3、Ajax和资源包是另壹种能够简化工作的方式。它让您能将此验证JavaScript移到另壹个文件,而不是JSP。且且,只对需要的消息键进行解析,而不是像使用预先构造的本地化版本方法壹样,对所有消息键进行解析。本文描述了如何联合使用Ajax和资源包来简化本地化后的客户端验证消息处理。我将侧重于使用Ajax的强大功能,而不会涉及现成框架的复杂性。本文所介绍的方式非常适合于需要快速响应的Web2.0应用程序,比如动态跟踪用户动作。于本文中,我不会过多涉及JSP页面内静态HTML内容的本地化。本文所侧重的是联合使用Ajax和资源包来实现本地化后的客户端验证消息处理。不过,用来于服务器端解析消息键的Jav

4、a实用工具也可用于本地化JSP页面内的静态HTML内容。关键字国际化(Internationalization)指壹种应用程序设计过程,使应用程序不需要进行重大修改就可适用于各种语言和地区。有时,国际化这壹术语常被缩写为i18n,因为于首字母“i”和最后壹个字母“n”之间共1有8个字母。本地化(Localization)针对某个特定地区或语言调整软件的过程,添加特定于本地语言环境的组件和经过翻译的文本。本地化这壹术语常被缩写为l10n,这是因为于字母“l”和“n”之间共有10个字母。本地化的首要任务是翻译用户界面元素和文档。本地化所涉及的不仅是互换语言,而且仍会涉及更改关联元素,比如数字、日期

5、、货币等的显示。其他类型的数据(比如声音和图像)若对文化敏感,可能也均需要进行本地化。应用程序的国际化越好,越容易针对特定的语言和字符编码模式对其进行本地化。Ajax是壹种技术,用来创建更好、更快且更为交互的Web应用程序。借助Ajax,JavaScript代码可使用XMLHttpRequest对象和服务器直接通信。有了此对象,JavaScript代码能够于不重新装载页面的情况下和Web服务器进行数据交换。开发壹个国际化的Web应用程序只要是针对全球(地理位置分散)用户开发Web应用程序,就要尊重和考虑用户对本地语言和文化的偏好。于Web应用程序内提供对国际化的支持时,需要考虑以下几点。?识别

6、出文化敏感数据?于资源包中分离出可翻译文本?处理混合消息?格式化数字及货币?格式化日期及时间?使用Unicode字符属性?正确地对比字符串?将非Unicode文本转换为Unicode支持本地化了的客户端消息处理的高级步骤于构建具有国际化支持和本地化了的客户端消息处理机制的Web应用程序时,下列几点是必须要满足的。?所有本地化了的页面均应支持UTF-8字符集(页面编码)。?所有客户端消息均应使用特定于客户机本地语言环境的资源包从服务器端获取。?资源包应存储键值对。数值要使用Unicode字符。?使用Ajax将来自客户端JavaScript的请求发送给壹个服务器端资源,该资源会解析此请求以针对此键

7、获得特定于客户机本地语言环境的消息。?解析所获取的消息且正确显示。使用Ajax实现本地化后的客户端消息处理的壹种实用方式于本节中,我们会带您亲历构建基本结构所需执行的各种操作,且会用壹个示例页面对它进测试,然后会于您的Web应用程序中反复使用。首先,要准备资源包属性文件。这些*.properties文件保存于该项目的类路径中,文件内包含键-值对,且可用作资源包来获得特定于本地语言环境的运行时解析的验证消息。所有这些*.properties文件均应符合Java国际化标准命名约定。清单1.包属性文件#org/rpd/i18n/bundles/Messages.properties-Resource

8、Bundlefordefaultlocale#Thesamplemessagekey-valuepairs.error.loginid.required=UserNameisMandatory.error.useremail.required=EmailIdisMandatory.error.password.required=Passwordisrequired.error.password.length=PasswordLengthshouldnotbelessthansix(6)character.error.confirmpassword.required=ConfirmPasswor

9、disrequired.error.passwordconfirm.match=PasswordandConfirmPassworddoesnotmatch.error.firstName.required=FirstNameisrequired.error.lastName.required=LastNameisrequired.接下来,创建壹个Java类来管理这些资源包。这个类(比如说ResourceManager.java)提供了将特定于本地语言环境的资源包加载到缓存的函数。借助它,仍能根据给定消息键和本地语言环境检索消息值。清单2.ResourceManager.javamon;imp

10、ortjava.util.HashMap;importjava.util.Locale;importjava.util.Map;importjava.util.ResourceBundle;publicclassResourceManager/Thenameandlocationoftheresourcebundle.privatefinalStringmMessageBundle=org/rpd/i18n/bundles/Messages;/Theloadedmessagecache.privateMapmResourceCache=null;/Privateinstancevariable

11、.privatestaticResourceManagermManager=null;/defaultprivateconstructor.privateResourceManager()mResourceCache=newHashMap();/Getthelocale-specificbundlefromcache./FirstloadtothecacheifnotalreadyloadedpublicResourceBundlegetBundle(Localelocale)if(locale=null)locale=Locale.getDefault();if(mResourceCache

12、.containsKey(locale)=false)ResourceBundlebundle=ResourceBundle.getBundle(mMessageBundle,locale);mResourceCache.put(locale,bundle);returnmResourceCache.get(locale);/ThreadsafeSingletonpatternimplementation.privatestaticResourceManagergetInstance()synchronized(ResourceManager.class)if(mManager=null)mM

13、anager=newResourceManager();returnmManager;/Getthemessageforthekeyusingdefaultlocale.publicstaticStringgetMessage(Stringkey)returngetMessage(key,null);/Getthemessageforthekeyandspecifiedlocale.publicstaticStringgetMessage(Stringkey,Localelocale)tryreturngetInstance().getBundle(locale).getString(key)

14、;catch(Exceptione)return;创建壹个JSP文件来处理Ajax请求。这个JSP文件(例如,MessageResolver.jsp)负责处理Ajax请求以解析这些消息键(对这个JSP而言,就是请求参数,message-key)。它使用由ResourceManager类提供的消息检索特性来解析作为请求参数进入这个JSP的每个消息键。清单3.MessageResolver.jsp%/Thenameoftherequestparameterrepresentingtheinput/HTMLElement-MessageKeycombination.finalStringREQ_ID

15、=message-key;/Messageprefixtobeusedinoutputstring.finalStringMSG_PREFIX=begin:;/Messagesuffixtobeusedinoutputstring.finalStringMSG_SUFFIX=:end;/ThestandardHTMLElement-MessageKeydelimiter.finalStringELEMENT_KEY_DELIM=,;/TheHTMLElement-LocalizeMessagedelimitertobeusedin/outputstring.finalStringKEY_VAL

16、_DELIM=;/FindtherequestparametercontainingtheHTMLElement-MessageKey/combinationString.StringkeysArr=request.getParameter(REQ_ID);/Ifthedesiredrequestparameterdoesntexist,itmeansrequestisinvalid.if(keysArr=null)out.println(Invalidmessagekey);else/Splittheinputusingtheelement-keydelimiter(ELEMENT_KEY_

17、DELIM).Stringkeys=keysArr.split(ELEMENT_KEY_DELIM);/Checkifthenumberoftuplesiseven.Ifnot,itmeanstheinputisincorrect.if(keys.length%2)!=0)out.println(Improperelem-keycombination:+keysArr);else/Iteratethrougheachelem-keycombination.for(inti=0;i准备JavaScript实用程序来管理Ajax调用。应该同时编写壹组JavaScript例程(例如,MessageD

18、isplay.js),这有助于为MessageResolver.jsp的Ajax调用创建正确的输入。JSP需要的是壹个请求参数,这个请求参数必须是壹个由逗号分隔的字符串组。字符串由HTMLElement(占位符)Identifier和消息键对组成,且且这个消息键将于解析之后显示于该HTML元素内。这里也会涉及到壹个例程(displayMessage()方法),用它来将解析后的消息正确地显示给关联的HTML元素。清单4.MessageDisplay.jsvarxmlHttp=null;varmsgKeys=newArray();varmsgPrefix=begin:;varmsgSuffix=:

19、end;varmsgDelimiter=;varjspURL=MessageResolver.jsp;/resetmsgKeysarray.functionresetMsgKeys()msgKeys=newArray();/AddingtothearrayofkeysfunctionaddMsgKey(elemId,msgKey)msgKeysmsgKeys.length=newArray();msgKeysmsgKeys.length-10=elemId;msgKeysmsgKeys.length-11=msgKey;document.getElementById(elemId).inner

20、Text=;/DifferentbrowsersusedifferentmethodstocreateXMLHttpRequestobjects.functiongetXmlHttpObject()xmlHttp=null;try/Firefox,Opera8.0+,SafarixmlHttp=newXMLHttpRequest();catch(e)/InternetExplorertryxmlHttp=newActiveXObject(Msxml2.XMLHTTP);catch(e)tryxmlHttp=newActiveXObject(Microsoft.XMLHTTP);catch(e)

21、alert(YourbrowserdoesnotsupportAjax!);returnfalse;returnxmlHttp;/TopassonthekeytotheJSPfunctiongetMessage(key)/checkingforbrowsersupportxmlHttp=getXmlHttpObject();if(xmlHttp=null)alert(BrowserdoesnotsupportAjax);returnfalse;varurl=jspURL+?message-key=+key;xmlHttp.onreadystatechange=displayMessage;xm

22、lHttp.open(GET,url,true);xmlHttp.send(null);/ResponsegeneratedagainsttherequestfunctiondisplayMessage()if(xmlHttp.readyState=4|xmlHttp.readyState=complete)varlocalizedMsg=xmlHttp.responseText;while(true)varbegInd=localizedMsg.indexOf(msgPrefix);varendInd=localizedMsg.indexOf(msgSuffix);if(begInd0|en

23、dInd0)break;varmsg=localizedMsg.substring(begInd+msgPrefix.length),endInd);varelemVal=msg.split(msgDelimiter);document.getElementById(elemVal0).innerText=document.getElementById(elemVal0).innerText+*+elemVal1;localizedMsg=localizedMsg.substring(endInd+msgSuffix.length);创建壹个用于测试的客户机JSP/HTML。这个页面(例如,N

24、ewUserRegistration.js)有壹些输入字段,这些字段的数据需要用JavaScript于客户端进行验证。可是由于用户很有可能于输入数据时出错,因此,验证逻辑应能立即用恰当的消息提示用户。由于此验证消息应该被本地化,因而验证逻辑需要使用之前准备好的Ajax实用程序来针对各类有效性问题显示特定于本地语言环境的消息。清单5.NewUserRegistration.jspNewUserRegistration EmailID:UserName:Password:ConfirmPassword:FirstName:LastName:于表单字段上应用验证条件。这个示例JSP具有壹个

25、表单,需要于此表单进行必要的输入以便完成用户的系统注册过程。此外,仍需要满足壹些验证条件才能对它进行提交:/a. EmailID和UserName字段是必需的。b. Password字段也是必需的,且至少要有6个字符。c. ConfirmPassword字段的值要和用户于“Password”字段所键入的值完全相同。d. FirstName和LastName字段也是必需的。创建JavaScript例程来验证表单。负责对各字段执行验证的JavaScript例程(例如,ValidateNewUser.js)要于HTML表单发生onsubmit事件时调用。它仍会准备恰当的消息键和占位符HTMLElem

26、entID对,如需要,它们将被用作此Ajax调用内的输入以便解析和显示本地化了的消息。如果此表单通过了验证测试,它就会被提交给目标操作。清单6.ValidateNewUser.jsfunctionvalidateNewUser()resetMsgKeys();document.getElementById(loginErrMsg).innerText=;document.getElementById(emailErrMsg).innerText=;document.getElementById(passwordErrMsg).innerText=;document.getElementById

27、(confirmpassErrMsg).innerText=;document.getElementById(firstNameErrMsg).innerText=;document.getElementById(lastNameErrMsg).innerText=;if(document.frmRegistration.loginId.value=)addMsgKey(loginErrMsg,error.loginid.required);if(document.frmRegistration.emailId.value=)addMsgKey(emailErrMsg,error.userem

28、ail.required);if(document.frmRegistration.password.value=)addMsgKey(passwordErrMsg,error.password.required);elseif(document.frmRegistration.password.value.length0)getMessage(msgKeys);returnfalse;returntrue;部署和测试将这个应用程序部署到任意壹个Web服务器(例如,Tomcat)上,且启动此服务器实例。然后,打开壹个浏览器实例(例如,InternetExplorer),找到客户机内设置的首选语

29、言。它应该是English,如图1所示(单击这里能够查见放大图)。图1.语言首选浏览此URL,寻找用户注册页面(NewUserRegistration.jsp),如图2所示。图2.用户注册于除UserName字段外的所有字段输入值。UserName字段空着。按下Submit。应该会见到如图3所示的UserName行旁边的验证消息(英语)。图3.输入用于验证的值更改浏览器(InternetExplorer)中的语言。删除English且加入Hindi。图4.将首选语言更改为Hindi关闭浏览器的这个实例且打开壹个新实例。再次浏览同壹个(用户注册)页面。正确地输入所有字段,“UserName”字段

30、仍旧留空。应该会见到“UserName”行旁边显示的验证消息(印度语),如图5所示。图5.更新后的验证消息步骤总结1. 准备服务器端资源来解析消息键:准备资源包(Messages*.properties)。定义壹个Java实用程序(ResourceManager.java)来针对给定的键和本地语言环境解析特定于本地语言环境的消息值。为Ajax调用定义壹个服务器端请求处理程序JSP(例如MessageResolver.jsp)。a. 此JSP要有壹个请求参数,例如,消息键。b. 这个消息键参数的值应是壹个以逗号分隔的有效字符串列。c. 于用“,”(逗号)作为分隔符分隔此值后,项的数目应该为偶数。

31、d. 每个(连续)项对均应被分别处理。第壹项应该是这个HTML元素的ID,结果消息应于此HTML元素内显示。第二项应是要从此资源包解析出的实际的消息键。按照预定义的结构准备此响应。e. 为每个HTML元素和消息键重复同样格式。2. 于客户端验证的过程中:a. 准备占位符HTML元素ID和消息键对的列表。验证每个HTML表单字段且按前述要求准备此对。b. 从上面的ElementID和消息键对列表中创建壹个以逗号分隔的字符串。对此服务器端资源(即于步骤1.a中创建的JSP)进行壹次Ajax调用,追加壹个查询字符串“message-key=。3. 于客户端,于处理来自Ajax调用的响应时:a. 解析

32、这个由JSP生成的响应(步骤1.f到1.g)。b. 分离HTML元素ID及相应的消息值的成对列表。c. 针对每个HTML元素进行合适的JavaScript调用以正确显示消息。结束语当下,您应该了解了用Ajax显示本地化后的客户端验证消息是多么简单。尽管我已经尽可能简化了设置,尽可能实现开箱即用,但本方式仍是能够通过壹些现成的系统和技术得到进壹步改进。例如,如果您的Web应用程序使用JakartaStruts或其他类似框架,而这些框架均能提供现成的、更完善的资源包的使用方法,那么您尽能够使用这些框架,而不是自己创建的ResourceManager.java实用程序类。类似地,JavaScript(和Ajax)例程也能够编写得更为完善和全面,从而满足您自己的Web应用程序的标准和要求。下载描述名字大小下载方法本文的示例应用程序LocalizationExample.zip14KBHTTP关于下载方法的信息参考资料?这个Ajax教程给出了Ajax技术的基本概念。?这是有关尝试Struts国际化的优秀教程。?DojoandInternationalization文档会给您打下壹个很好的基础。?了解有关JavaInternationalizationandLocalizationwithResourceBundles的信

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!