- Struts 2.x权威指南
- 李刚编著
- 745字
- 2022-07-20 11:11:59
4.4.3 局部类型转换器
实现了自定义类型转换器之后,将该类型转换器注册在Web应用中,Struts 2框架才可以正常使用该类型转换器。
关于类型转换器的注册方式,主要有如下三种。
注册局部类型转换器:局部类型转换器仅仅对某个Action的属性起作用。
注册全局类型转换器:全局类型转换器对所有Action的特定类型的属性都会生效。
使用JDK 1.5的Annotation来注册类型转换器。
下面介绍的是局部类型转换器的注册,要注册类型转换器只需提供文件名为如下格式的文件即可。
ActionName-conversion.properties:ActionName是需要转换器生效的Action的类名,后面的-conversion.properties字符串则是固定部分。
对于上面的 LoginAction 类,应该提供的类型转换器注册文件的文件名为:LoginAction-conversion.properties,该文件是一个典型的Properties文件,文件由key-value对组成。文件内容为:
propertyName=类型转换器类
ActionName-conversion.properties文件由多个“propertyName=类型转换器类”项组成,其中“propertyName”是Action中需要类型转换器转换的属性名,“类型转换器类”是开发者实现的类型转换器的全限定类名(需要加包前缀)。
下面是LoginAction-conversion.properties文件的内容。
# 指定LoginAction的user属性需要使用org.crazyit.struts2.action.UserConverter类来完成类型转换 user=org.crazyit.struts2.action.UserConverter
LoginAction-conversion.properties 文件应该与 LoginAction.class 放在相同位置(因为LoginAction的包为org.crazyit.struts2.action,因此该文件应该放在Web应用的WEB-INF/classes/org/crazyit/struts2/action路径下)。
至此,局部类型转换器注册成功。当浏览者提交请求时,请求中的 user 请求参数将会先被该类型转换器处理。
如果在图4.5所示页面的用户信息输入框中输入“crazyit,leegang”字符串,根据类型转换器的作用,它会将crazyit解析成User实例的name属性,leegang将被作为User实例的pass属性。提交请求,将看到如图4.7所示的页面。
![](https://epubservercos.yuewen.com/1C94E6/3590582303459301/epubprivate/OEBPS/Images/figure_0140_0314.jpg?sign=1739420328-rVjX47AyWJxHdnPPY7GRf8PLb38RJxKm-0-756d47877de03c8def4879afc2db98a1)
图4.7 局部类型转换器转换成功
局部类型转换器只对指定 Action 的特定属性起作用,这具有很大的局限性——我们花费了大量时间完成了一个类型转换器,却只能一次使用(对一个Action有效),这太浪费了。通常我们会将类型转换器注册成全局类型转换器,让该类型转换器对该类型的所有属性起作用。
提示:
局部类型转换器只对指定 Action 的指定属性生效,全局类型转换器对指定类型的全部属性起作用。