书签 分享 收藏 举报 版权申诉 / 92
上传文档赚钱

类型《基于新信息技术的Java-EE应用开发实训》课件第八章.pptx

  • 上传人(卖家):momomo
  • 文档编号:7669524
  • 上传时间:2024-06-24
  • 格式:PPTX
  • 页数:92
  • 大小:984.66KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《基于新信息技术的Java-EE应用开发实训》课件第八章.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    基于新信息技术的Java-EE应用开发实训 基于 信息技术 Java EE 应用 开发 课件 第八
    资源描述:

    1、第8章 Struts 2其他功能8.1 Struts 2类型转化8.2 Struts 2输入校验8.3 Struts 2国际化8.4 Struts 2的异常处理第8章 Struts 2其他功能8.1 Struts 2类型转化第8章 Struts 2其他功能Struts 2提供了非常强大的类型转换机制。Struts 2的类型转换可以基于OGNL表达式,只要我们把HTTP参数命名为合法的OGNL表达式,就可以充分利用Struts 2的类型转换机制。除此之外,Struts 2提供了很好的扩展性,开发者可以非常简单地开发出自己的类型转换器,完成字符串和自定义复合类型之间的转换,如果类型转换中出现未知异

    2、常,类型转换器开发者无须关心异常处理逻辑,Struts 2的conversionError拦截器会自动处理该异常,并且在页面上生成提示信息。总之,Struts 2的类型转换器提供了非常强大的表现层数据处理机制,开发者可以利用Struts 2的类型转换机制来完成任意的类型转换。表现层数据的流向以及所需的类型转换如图8-1所示。第8章 Struts 2其他功能表现层另一个数据处理是数据校验,数据校验可分为客户端校验和服务器端校验两种。客户端校验和服务器端校验都是必不可少的,二者分别完成不同的过滤。客户端校验进行基本校验,如检验非空字段是否为空,数字格式是否正确等。客户端校验主要用来过滤用户的误操作

    3、。客户端校验的作用是:拒绝误操作输入提交到服务器处理,降低服务器端负担。服务器端校验也必不可少,服务器端校验防止非法数据进入程序,导致程序异常、底层数据库异常。服务器端校验是保证程序有效运行及数据完整的手段。8.1.1 内建的类型转换对于大部分的常用类型,开发者无须理会类型转换,Struts 2可以完成大多数常用的类型转换。这些常用的类型转换是通过Struts 2内建的类型转换器完成的,Struts 2已经内建了字符串类型和如下类型之间的相互转换的转换器。boolean和Boolean:完成字符串和布尔值之间的转换。char和Character:完成字符串和字符之间的转换。int和Intege

    4、r:完成字符串和整型值之间的转换。第8章 Struts 2其他功能long和Long:完成字符串和长整型之间的转换。float和Float:完成字符串和单精度浮点值之间的转换。double和Double:完成字符串和双精度浮点值之间的转换。Date:完成字符串和日期类型之间的转换,日期格式使用用户请求所在的Locale的SHORT格式。数组:在默认情况下,数组元素是字符串,如果用户提供了自定义类型转换器,也可以是其他复合类型的数组。集合:在默认情况下,假定集合元素类型为String,并创建一个新的ArrayList封装所有的字符串。因为Struts 2提供了上面这些类型转换器,所以如果需要把H

    5、TTP请求参数转换成上面这些类型,则无须开发者进行任何特殊的处理。8.1.2 自动类型转换本节通过示例代码学习Struts 2内建的类型转换器。新建一个简单的Action文件:public class AddMaterialAction extends ActionSupport 第8章 Struts 2其他功能 /属性类型需要类型转换的对象 private Material material;public Material getMaterial()return material;public void setMaterial(Material material)this.material=

    6、material;public String execute()throws Exception return SUCCESS;第8章 Struts 2其他功能 在Action中需要转换类型的Java Bean文件。public class Material /材料名 private String material;/材料价格 private Double bid;/材料数量 private int mount;/过期时间 private Date expireDate;第8章 Struts 2其他功能 public String getMaterial()return material;pu

    7、blic void setMaterial(String material)this.material=material;public Double getBid()return bid;public void setBid(Double bid)this.bid=bid;public Date getExpireDate()第8章 Struts 2其他功能 return expireDate;public void setExpireDate(Date expireDate)this.expireDate=expireDate;public int getMount()return moun

    8、t;public void setMount(int mount)this.mount=mount;第8章 Struts 2其他功能在Java Bean中有四个属性以及相对性的get()和set()方法。四个属性的类型分别是String、Double、int、Date类型。配置struts.xml文件。/addMaterial.jsp /showMaterial.jsp 新建一个输入页面addMaterial.jsp,在页面中分别录入对应Java Bean的四个属性,看看Struts 2内建的类型转换器是否自动工作。第8章 Struts 2其他功能类型转换 第8章 Struts 2其他功能 在

    9、页面中输入相应的值,效果如图8-2所示。第8章 Struts 2其他功能当点击提交按钮后,页面跳转到Action并跳转到showMaterial.jsp页面展现给用户。showMaterial.jsp代码如下,主要通过Struts 2的标签输出前面从Action转过来的变量值。类型转换器 第8章 Struts 2其他功能 材料名:价格:库存量:过期日期:页面中的变量值已经转换成对应的数据类型,不再全部是在addMaterial.jsp页面中的字符串类型了,页面效果如图8-3所示。第8章 Struts 2其他功能8.1.3 类型转换中的错误表现层数据是由用户输入的,用户输入则是非常复杂的,正常用

    10、户的偶然错误,还有恶意Cracker(破坏者)的恶意输入,都可能导致系统出现非正常情况。例如,在输入页面中,我们希望用户输入scott,tiger模式的字符串,希望用户输入的字符串用一个英文逗号作为用户名和密码的分隔符,如果用户输入多于一个的英文逗号,或者没有输入英文逗号,都将引起系统异常因为上面的类型转换器将无法正常分解出用户名和密码。实际上,表面层数据涉及的两个处理:数据校验和类型转换是紧密相关的,只有当输入数据是有效数据时,系统才可以进行有效的类型转换当然,有时候即使用户输入的数据能进行有效转换,但依然是非法数据。因此,有效的类型转换是基础,只有当数据完成了有效的类型转换,下一步才能做数

    11、据校验。Struts 2提供了一个名为conversionError的拦截器,这个拦截器被注册在默认的拦截器栈中。我们查看Struts 2框架的默认配置文件struts-default.xml,该文件中有如下配置片段:第8章 Struts 2其他功能 input,back,cancel,browse 在上面默认拦截器栈中包含了conversionError拦截器引用,如果Struts 2的类型转换器执行类型转换时出现错误,该拦截器将负责将对应错误封装成表单域错误(fieldError),并将这些错误信息放入ActionContext中。显然,conversionError拦截器实际上是AOP中

    12、的Throws处理。Throws处理当系统抛出异常时启动,负责处理异常。通过这种方式,Struts 2的类型转换器中只完成类型转换逻辑,而无须关心异常处理逻辑。因此,我们看第8章 Struts 2其他功能到上面的类型转换器无须进行任何异常处理逻辑。图8-4显示了Struts 2类型转换中的错误处理流程。图8-4只显示了类型转换器、conversionError拦截器和控制器之间的顺序图,并未完全刻画出系统中其他成员。当conversionError拦截器对转换异常进行处理后,系统会跳转到名为input的逻辑视图。第8章 Struts 2其他功能我们再来看上面自动类型转换的示例,在addMate

    13、rial.jsp页面中输入无法转换的数值,例如,价格属性对应的文本输入框,本来应该输入数值,但是现在输入不是数值的字符。页面效果如图8-5所示。由于价格属性无法转换,系统会出现转换错误。这个错误Struts 2框架已经帮我们捕获处理。后台日志如下:警告:Error setting expression material.bid with value Ljava.lang.String;9b9a30ognl.MethodFailedException:Method setBid failed for object example.Materialff2be8 java.lang.NoSuchMe

    14、thodException:example.Material.setBid(Ljava.lang.String;)Struts 2框架会转入input.jsp页面,等待用户再次输入。Struts 2会负责将转换错误封装成FieldError,并将其放在ActionContext中,这样就可以在对应视图中输出转换错误,如图8-6所示。第8章 Struts 2其他功能8.1.4 定义局部异常提示在默认情况下,使用标签会输出Invalid field value for field xxx的错误信息,其中xxx是Action中属性名,也是该属性对应的请求参数名。但是有时候我们希望自定义输出提示可能更

    15、加人性化,此时可使用定义局部属性文件,在该文件中定义类型转换发生异常时会提示错误。我们在Action文件同目录下定义了名为“ActionName.properties”的属性文件,在该属性文件中对类型转换错误的属性进行定义。其中“material.bid”就是输入数据的JSP页面中定义的field的name。而“invalid.fieldvalue”则是固定不变的格式。这样设置后,系统就会在发生类型转换错误时候在页面上显示属性文件中定义的类型转换错误的提示信息。在Action 文件AddMaterialAction.java的相同目录下面,新建AddMaterialAction.propert

    16、ies文件。经过上面更改后,异常输出提示如图8-7所示。#Action属性类型转换错误提示invalid.fieldvalue.material.bid=u6750u6599u4EF7u683Cu8F93u5165u9519u8BEF#材料价格输入错误第8章 Struts 2其他功能8.1.5 定义全局异常提示为每个Action定义局部异常提示有时是必要的,但实际工作一般会定义一个全局的异常提示的属性文件。先在struts.properties属性文件中更改自定义的属性文件名称。struts.custom.i18n.resources=messageResource添加自定义的属性文件mess

    17、ageResource.properties。#0类型转换错误xwork.default.invalid.fieldvalue=0u7c7bu578bu8f6cu6362u9519u8bef在addMaterial.jsp页面中输入无法转换的数值。现在错误提示使用了全局自定义的提示,其实也就是修改了系统默认的xwork.default.invalid.fieldvalue属性值,效果如图8-8所示。第8章 Struts 2其他功能8.1.6 自定义类型转换器Struts 2的类型转换器实际上是基于OGNL实现的,在OGNL项目中有一个ognl.TypeConverter接口,这个接口就是实现类

    18、型转换器必需的接口。不过ognl.TypeConverter接口中的方法过于复杂,所以OGNL项目提供了一个该接口的实现类:ognl.DefaultTypeConverter,通过继承该类实现类型转换器。新建一个自定义的类型转换器,它继承了ognl.DefaultTypeConverter,具体代码如下:public class MyConverter extends DefaultTypeConverter Override public Object convertValue(Map context,Object value,Class toType)return materialName

    19、-+(String)value)0;第8章 Struts 2其他功能在自定义的类型转换器MyConverter中,重写了convertValue()方法。该方法完成类型转换。不过这种类型转换是双向的,当需要把字符串转化对象实例时,通过该方法实现,当把对象实例转换成字符串时也通过该方法实现。这种转换是通过toType参数类型是需要转换的目标类型。所以可以根据toType参数来判断转换方向。convertValue()方法参数和返回意义。第一个参数:context是类型转换环境的上下文。第二个参数:value是需要转换的参数,根据转换方向的不同value参数的值也是不一样的。该参数是一个字符串数组

    20、类型,因为对于DefaultTypeConverter转换器而言,它必须考虑到最通用的情形,因此他把所有请求参数都视为字符串数组而不是字符串。相当于getParameterValues()获取的参数值。第三个参数:toType是转换后的目标类型。返回值:类型转换后的值。该值的类型也会随着转换的方向的改变而改变。由此可见转换的convertValue方法接受需要转换的值,需要转换的目标类型为参数,然后返回转换后的目标值。第8章 Struts 2其他功能完成自定义类型转换器编码后,通过属性文件注册并配置类型转换器。和定义局部异常提示的属性文件一样,在Action文件AddMaterialActio

    21、n.java目录下面新建一个属性文件,文件命名规则是-conversion.properties,所以为AddMaterialAction.java定义的属性文件名称为AddMaterialAction.properties。在AddMaterialAction.properties文件中添加代码:material.material=example.MyConverter代码中“material.material”是指定转换addMaterial.jsp页面中“材料名”属性,转换器为自定义的example.MyConverter类。我们运行工程测试一下。在addMaterial.jsp页面输入

    22、测试数据,效果如图8-9所示。第8章 Struts 2其他功能点击提交按钮后,“材料名”属性会通过自定义的类型转换器进行转换,在自定义类型转换器中把“材料名”属性自动添加前缀“materialName”,转换后的页面效果如图8-10所示。第8章 Struts 2其他功能8.2 Struts 2输入校验第8章 Struts 2其他功能8.2.1 Struts 2输入校验支持对于异常输入,轻则导致系统正常中断,重则导致系统崩溃。应用程序必须能正常处理表现层接收的各种数据,通常的做法是遇到异常输入应用程序直接返回,提示浏览者必须重新输入,也就是将那些异常输入过滤掉。对异常输入的过滤,就是输入校验,也

    23、称为数据校验。输入校验分为客户端校验和服务器端校验,客户端校验主要是过滤正常用户的误操作,主要通过JavaScript代码完成;服务器端校验是整个应用阻止非法数据的最后防线,主要通过在应用中编程实现。Struts 2框架提供了强大的类型转换机制,也提供了强大的输入校验功能,Struts 2的输入校验既包括服务器端校验也包括客户端校验。Struts 2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts 2的验证框架将会负责进行服务器校验和客户端校验。下面应用将会示范如何利用Struts 2的校验框架进行输入校验。使用Struts 2的校验框架进行

    24、校验无须对程序代码进行任何改变,只需编写校验规则文件即可,校验规则文件指定每个表单域应该满足怎样的规则。第8章 Struts 2其他功能本应用的表单代码如下:注册第8章 Struts 2其他功能上面代码定义了4个表单域,这4个表单域分别对应name、pass、age和birth这4个请求参数,假设本应用要求这4个请求参数满足如下规则:name和pass只能是字母和数组,且长度必须在4至25之间。年龄必须是1至150之间的整数。生日必须在1900-01-01和2050-02-21之间。下面是请求对应的Action代码:public class RegistAction extends Actio

    25、nSupport private String name;第8章 Struts 2其他功能 private String pass;private int age;private Date birth;/此处省略了4个属性的setter和getter方法 /.private String pass;private int age;private Date birth;/此处省略了4个属性的setter和getter方法 /.第8章 Struts 2其他功能在上面Action中,我们仅提供了4个属性来封装用户的请求参数,并为这4个参数提供了对应的setter和getter方法。该Action继承

    26、了ActionSupport类,因此它包含了一个execute方法,且该方法直接返回success字符串,这个Action不具备任何输入校验的功能。但通过该Action指定一个校验规则文件后,即可利用Struts 2的输入校验功能对该Action进行校验。下面是本应用所使用的输入校验文件。第8章 Struts 2其他功能true必须输入名字您输入的用户名只能是字母和数字,且长度必须在4到25之间第8章 Struts 2其他功能true必须输入密码您输入的密码只能是字母和数字,且长度必须在4到25之间第8章 Struts 2其他功能1150年纪必须在1到150之间1900-01-012050-0

    27、2-21第8章 Struts 2其他功能生日必须在$min到$max之间校验规则文件的根元素是元素,元素可包含多个或元素,它们都用于配置校验规则,区别是:是字段校验器的配置风格,而 是非字段校验器的配置风格。Struts 2的校验文件则与Struts1的校验文件设计方式不同,Struts 2中每个Action都有一个校验文件,因此该文件的文件名应该遵守如下规则:-validation.xml前面的Action名是可以改变的,后面的validation.xml部分总是固定的,且该文件应该被保存在与Action class文件相同的路径下。第8章 Struts 2其他功能增加了该校验文件后,其他部

    28、分无须任何修改,系统会自动加载该文件,当用的提交请求时,Struts 2的校验框架会根据该文件对用户请求进行校验。如果浏览者的输入不满足校验规则,将可以看到如图8-11所示的页面。第8章 Struts 2其他功能8.2.2 手动完成输入校验基于Struts 2校验器的校验可以完成绝大部分输入校验,但这些校验器都具有固定的校验逻辑,无法满足一些特殊的校验规则。对于一些特殊的校验要求,可能需要在Struts 2中进行手动校验。Struts 2提供了良好的可扩展性,从而允许通过手动方式完成自定义校验。本应用一样采用前面的注册页面,但现在我们要求name请求参数的值必须包含crazyit字符串。现在我

    29、们通过重写ActionSupport类的validate()方法来进行这种校验。下面的示例将对上面的注册应用进行改进,为上面的Web应用增加Struts 2支持。增加Struts 2支持后,将通过如下的Action来处理用户请求。下面的Action仅仅重写了ActionSupport类的validate方法。下面是重写validate()方法后的RegistAction代码。public class RegistAction extends ActionSupport private String name;private String pass;private int age;第8章 Str

    30、uts 2其他功能 private Date birth;/省略了4个属性的setter和getter方法 public void validate()System.out.println(进入validate方法进行校验+name);/要求用户名必须包含bruce子串 if(!name.contains(bruce)addFieldError(name,您的用户名必须包含bruce!);在validate方法中一旦发现校验失败,就把校验失败提示通过addFieldError方法添加进系统的FieldError中,第8章 Struts 2其他功能这与类型转换失败后的处理是完全一样的。除此之外,

    31、程序无须做额外的处理,如果Struts 2发现系统的FieldError不为空,将会自动跳转到input逻辑视图,因此依然必须在struts.xml文件中为该Action的input逻辑视图指定视图资源。除此之外,为了在input视图对应的JSP页面中输出错误提示,应该在该页面中增加如下代码:上面的标签专门负责输出系统的FieldError信息,也就是输出系统的类型转换失败提示和输入校验的失败提示。如果在输入页面什么都不输入,我们将会看到如图8-12所示的页面。第8章 Struts 2其他功能在上面的validate方法中,如果校验失败,我们直接添加了校验失败的提示信息,并没有考虑国际化的问题

    32、。但这并不是太大的问题,因为ActionSupport类里包含了一个getText方法,该方法可以取得国际化信息。Struts 2的Action类里可以包含多个处理逻辑,不同的处理逻辑对应不同的方法。即Struts 2的Action类里定义了几个类似于execute方法,只是方法名不是execute。如果我们的输入校验只想校验某个处理逻辑,也就是仅校验某个处理方法,则重写validate方法显然不够,validate()方法无法知道需要校验哪个处理逻辑。实际上,如果我们重写了Action的validate方法,则该方法会校验所有的处理逻辑。为了实现校验指定处理逻辑的功能,Struts 2的Ac

    33、tion允许提供一个validateXxx()方法。其中Xxx即是Action对应的处理逻辑方法。下面对上面的Action进行改写,为该Action增加regist,并增加validateRegist()方法。修改后RegistAction类代码如下:public class RegistAction extends ActionSupport private String name;第8章 Struts 2其他功能 private String pass;private int age;private Date birth;/此处省略4个属性的setter和getter方法 public v

    34、oid validate()System.out.println(进入validate方法进行校验+name);/要求用户名必须包含bruce子串 if(!name.contains(bruce)addFieldError(name,您的用户名必须包含bruce!);第8章 Struts 2其他功能 public void validateRegist()System.out.println(进入validate方法进行校验+name=null);/要求用户名必须包含bruce子串 if(!name.contains(bruce)addFieldError(name,您的用户名必须包含bruc

    35、e!);/增加一个regist方法,对应一个处理逻辑 public String regist()return SUCCESS;第8章 Struts 2其他功能实际上,上面的validateRegist方法与前面的regist方法大致相同,此处仅仅是为了讲解如何通过提供validateXxx方法来实现只校验某个处理逻辑。为了让该Action的regist方法来处理用户请求,必须在struts.xml文件中指定该方法。struts.xml文件的代码如下:第8章 Struts 2其他功能/Register2.jsp/Welcome.jsp 在上面名为regist的Action中,指定使用了exam

    36、ple.RegistAction的regist方法处理用户请求。如果浏览者再次向regist.action提交请求,该请求将由example.RegistAction的regist处理逻辑处理。如果我们在本应用的regist.jsp页面中不输入任何信息,直接提交请求,将看到如图8-13所示的页面。第8章 Struts 2其他功能当用户向regist方法发送请求时,该Action内的validate方法和validateRegist方法都会起作用,而且validateRegist方法首先被调用。不管用户向Action的哪个方法发送请求,Action内的validate方法都会被调用。如果该Act

    37、ion内还有该方法对应的validateXxx方法,则该方法会在validate方法之前被调用。第8章 Struts 2其他功能Struts 2的输入校验需要经过如下几个步骤:类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成Action的属性值。在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中,conversionError拦截器负责将其封装到FieldError里,然后执行第步如果转换过程中没有出现异常信息,则直接进入第步。使用Struts 2应用中所配置的校验器进行输入校验。通过反射调用validateXxx()方法,其中Xxx是即

    38、将处理用户请求的处理逻辑所对应的方法。调用Action类里的validate()方法。如果经过上面5步都没有出现FieldError,将调用Action里处理用户请求的处理方法;如果出现了FieldError,系统将转入input逻辑视图所指定的视图资源。图8-14显示了Struts 2表现层数据的整套处理流程。第8章 Struts 2其他功能第8章 Struts 2其他功能8.3 Struts 2国际化第8章 Struts 2其他功能8.3.1 加载全局资源文件Struts 2提供了很多加载国际化资源文件的方式,最简单、最常用的就是加载全局的国际化资源文件,加载全局的国际化资源文件的方式通过

    39、配置常量来实现。不管在struts.xml文件中配置常量,还是在struts.properties文件中配置常量,只需要配置struts.custon.i18n.resources常量即可。配置struts.custon.i18n.resources常量时,该常量的值为全局国际化资源文件的baseName。一旦指定了全局的国际化资源文件,即可实现程序的国际化。假设系统需要加载的国际化资源文件的baseName为messageResource,则我们可以在struts.properties文件中指定如下一行:#指定Struts 2国际化资源文件的baseName为messageResources

    40、truts.custon.i18n.resources=messageResource或者在struts.xml文件中配置如下的一个常量:第8章 Struts 2其他功能通过这种方式加载国际化资源文件后,Struts 2应用就可以在所有的地方取出这些国际化资源文件了,包括JSP页面和Action。8.3.2 访问国际化消息以上的例子都是用户必须通过单击按钮,才能触发click事件,但是有时,需要通过模拟用户操作,来达到单击的效果。例如在用户进入页面后,就触发click事件,而不需要用户去主动单击。Struts 2既可以在JSP页面中通过标签来输出国际化消息,也可以在Action类中输出国际化消

    41、息。不管采用哪种方式,Struts 2都提供了非常简单的支持。Struts 2访问国际化消息主要有如下3种方式:为了在JSP页面中输出国际化消息,可以使用Struts 2的标签,该标签可以指定一个name属性,该属性指定了国际化资源文件中的key。为了在Action类中访问国际化消息,可以使用ActionSupport类的getText()方法,该方法可以接受一个name参数,该参数指定了国际化资源文件中的key。第8章 Struts 2其他功能 为了在表单元素的Label里输出国际化消息,可以为该表单元素标签指定一个key属性,该key指定了国际化资源文件中的key。假设系统提供如下两份资源

    42、文件:#资源文件的内容就是key-value对loginPage=Login PageerrorPage=Error PagesuccPage=Welcome PagefailTip=Sorry,you canu2019t log in!succTip=Welcome,you has logged in!user=User Namepass=User Passlogin=Login第8章 Struts 2其他功能上面文件以messageResource_en_US.properties文件名保存,表明该国际化资源文件的baseName是messageResource,这是美国英语的资源文件。接

    43、下来为该应用提供中文环境的资源文件,文件名为_zh_CN.properties保存,表明该国际化资源文件的baseName是messageResource,这是中文的资源文件。资源文件代码如下:#登录页面loginPage=u767Bu5F55u9875u9762#错误页面errorPage=u9519u8BEFu9875u9762#成功页面succPage=u6210u529Fu9875u9762#对不起,您不能登录!failTip=u5BF9u4E0Du8D77uFF0Cu60A8u4E0Du80FDu767Bu5F55uFF01#欢迎,您已经登录!第8章 Struts 2其他功能succ

    44、Tip=u6B22u8FCEuFF0Cu60A8u5DF2u7ECFu767Bu5F55uFF01#用户名user=u7528u6237u540D#密码pass=u5BC6u7801#登录login=u767Bu5F55提供了上面两份资源文件后,通过上一节所介绍的方式加载国际化资源文件,系统会根据浏览者所在的Locale来加载对应的语言资源文件。下面是login.jsp页面代码。第8章 Struts 2其他功能第8章 Struts 2其他功能上面的JSP页面中使用了标签来直接输出国际化信息,也通过在表单元素中指定key属性来输出国际化消息。通过这种方式,就可以完成JSP页面中普通文本、表单元素

    45、标签的国际化。如果在简体中文环境下,浏览该页面将看到如图8-15所示的页面。如果在控制面板中修改语言/区域,将机器的语言/区域环境修改成美国英语环境,再次浏览该页面,将看到如图8-16所示的页面。第8章 Struts 2其他功能如果为了在Action中访问国际化消息,则可以利用ActionSupport类的getText方法。下面是本示例应用中Action类的代码。public class LoginAction extends ActionSupport /定义封装请求参数的两个属性 private String username;private String password;/省略use

    46、rname和password的setter和getter方法 public String execute()throws Exception ActionContext ctx=ActionContext.getContext();if(getUsername().equals(bruce)&getPassword().equals(bruce)第8章 Struts 2其他功能 ctx.getSession().put(user,getUsername();ctx.put(tip,getText(succTip);return SUCCESS;else ctx.put(tip,getText(

    47、failTip);return ERROR;第8章 Struts 2其他功能8.3.3 使用占位符在Java程序的国际化中,我们可以使用MessageFormat类来完成填充这些占位符。而struts 2则提供了更简单的方式来填充占位符,struts 2中提供了如下两种方式来填充消息字符串中占位符。如果需要在JSP页面中填充国际化消息里的占位符,则可以通过在标签中使用多个标签来填充消息中的占位符。第一个标签指定第一个占位符值,第二个标签指定第二个占位符值 如果需要在Action中填充国际化消息里的占位符,则可以通过在调用getText方法时使用getText(String aTextName,

    48、List args)或getText(String key,Srting args)方法来填充占位符。该方法的第二个参数既可以是第一个字符串数组,也可以是字符串组成的List对象,从而完成对占位符的填充。其中字符串数组、字符串集合中第一个元素将填充第一个占位符,字符串数组、字符串集合中第二个元素将填充第二个占位符假设国际化资源文件中有如下3条国际化消息:#三条带占位符的国际化消息#0,对不起,您不能登录!第8章 Struts 2其他功能failTip=0,u5BF9u4E0Du8D77uFF0Cu60A8u4E0Du80FDu767Bu5F55uFF01#0,欢迎,您已经登录!succTip=

    49、0,u6B22u8FCEuFF0Cu60A8u5DF2u7ECFu767Bu5F55uFF01#0,您好!现在时间是1!welcomeMsg=0,u60A8u597DuFF01u73B0u5728u65F6u95F4u662F1uFF01这3条国际化消息对应的英文消息如下:failTip=0,Sorry,You canu2019t log in!succTip=0,Welcome,you has logged inuFF01welcomeMsg=0,Hello!Now is 1uFF01为了在Action类中输出带占位符的消息,我们在Action类中调用ActionSupport类的getTe

    50、xt方法,调用该方法时,传入用于填充点位符的参数值。访问该带占位符消息的Action类如下:第8章 Struts 2其他功能public class LoginAction extends ActionSupport /定义封装请求参数的两个属性 private String username;private String password;/省略username和password的setter和getter方法 public String execute()throws Exception ActionContext ctx=ActionContext.getContext();if(get

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《基于新信息技术的Java-EE应用开发实训》课件第八章.pptx
    链接地址:https://www.163wenku.com/p-7669524.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库