`
m635674608
  • 浏览: 5041275 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

struts2中类型转换

 
阅读更多

一、概述
    Struts2.x中使用OGNL取代原来的EL用于页面数据绑定。

    OGNL(Object-Graph Navigation Language,对象图导航语言)是一种功能强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换功能。

    页面数据绑定是指把页面元素(例如一个textfield,hidden)和对象层某个类的某个属性绑定在一起,修改和显示自动同步。这样做的好处非常明显:在Struts2.x中不需要为每个页面专门编写formbean,可以直接利用对象层的对象。

    在B/S应用中,服务器接收到的用户数据只能是字符串或字符数组,但在服务器端的Java程序中,数据是有各种类型的,如整形、浮点型、日期类型等,以及各种自定义的数据类型。因此,在接收到客户端传过来的字符串数据后,我们还需要将这些数据转换为正确的类型。将字符串请求参数转换为相应的数据类型,是MVC框架提供的功能,而Struts2是很好的MVC框架实现者,理所当然,它也提供了类型转换机制。

    Struts2的类型转换是基于OGNL表达式的,只要我们把HTML输入项(表单元素和其他GET/POET的参数)命名为合法的OGNL表达式,就可以充分利用Struts2的类型转换机制。Struts2本身对基本数据类型带有转换器,同时也提供对java.util.Date类型的转换。日期类型只需在文本输入框中输入类似2010-05-01(注意浏览器的默认语言应该是中文)这样格式的数据,提交后在action中会自动转成java.util.Date类型。

    除此之外,Struts2提供了很好的扩展性,开发者可以非常简单的开发自己的类型转换器,完成字符串和自定义复合类型之间的转换。

    总之,Struts2的类型转换器提供了非常强大的表现层数据处理机制,可以利用其类型转换机制来完成任意的类型转换。

 

二、Struts2内置的类型转换器
String
 将int、long、double、boolean、String类型的数组或java.util.Date类型转换为字符串。
boolean/Boolean
 在字符串和布尔值之间进行转换。
char/Character
 在字符串和字符之间进行转换。
int/Integer、float/Float、long/Long、double/Double
 在字符串和数值型的数据之间进行转换。
date
 在字符串和日期类型之间进行转换。日期类型采用short格式处理输入和输出。
array
collection
 如果不能确定对象类型,则假定集合元素类型为String,并创建一个新的ArrayList,存放所有的字符串。
com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter(内置类型转换类)

 

三、实现自定义类型转换器
    需要实现ognl.TypeConverter接口或者继承ognl.DefaultTypeConverter类(该类实现了TypeCoverter接口)重写convertValue(Map context, Object value, Class toType)方法构建自己的类型转换器,参数context是表示OGNL上下文的Map对象,value是需要类型转换的对象,toType是要转换的目标类型。
    为了简化类型转换器的实现,Struts2提供了org.apache.struts2.util.StrutsTypeConverter抽象类,这个抽象类是DefaultTypeConverter的子类,并提供了两个不同转换方向的方法:
    Object convertFromString(Map context, String[] values, Class toClass);
 参数context是表示action上下文的Map对象,values是需要转换的字符串值,toClass是要转换的目标类型。
    String convertToString(Map context, Object o);
 参数context是表示action上下文的Map对象,o是要转换的对象。

 

四、注册自定义类型转换器
    编写完自定义类型转换器类之后,需要将该类型转换器注册在Web应用中,Struts2框架才可以正常使用该类型转换器。
类型转换器的注册方式,主要有3种:
1、注册局部类型转换器:仅仅对某个Action中的属性生效。
 需提供如下格式的文件
 文件名称:ClassName-conversion.properties【ClassName是需要进行类型转换的Action名称】
 文件内容:多个“propertyName(Action中需要转换的属性名称)= 对应的类型转换器类名(含包名)”项组成
 存放位置:和Action类在同一路径下面。

2、注册全局类型转换器:对所有Action的特定类型的属性都会生效。
 需提供如下格式的文件
 文件名称:xwork-conversion.properties【名称固定,不可改变】
 文件内容:多个“propertyClassName(Action中需要转换的属性的类的全名)= 对应的类型转换器类名(含包名)”项组成
 存放位置:WEB-INF\classes\。
 
3、使用注解注册类型转换器:通过注解方式生成类型转换器。 
 注解共有6个:TypeConversion、Conversion、Element、Key、KeyProperty、CreateIfNull
 TypeConversion:应用于属性和方法级别。
 Conversion:应用于类型(TYPE)级别,即类、接口或者枚举。
 Element:用于指定Collection或Map中的元素类型,应用于属性和方法级别。
 Key:用于指定Map中的key类型,应用于属性和方法级别。
 KeyProperty:用于索引集合元素的属性名,应用于属性和方法级别。
 CreateIfNull:在指定的集合元素为null时,是否让框架创建它,应用于属性和方法级别。
 


五、应用示例
1、局部类型转换:对某个Action中的属性进行类型转换(一个属性、多个属性)
(1)、编写类型转换器类,此类继承ognl.DefaultTypeConverter类。
在自己的转换器类中重写父类的Object convertValue(Map context, Object value, Class toType)方法。
//从表单字符串转换为*****对象类型 
if(Hyphen.class == toType){
 ......
 String [] valueStrings = (String[])value;
 ......
}
//从*****对象类型转换为字符串
if(String.class == toType){
 ......
 Hyphen hyphen = (Hyphen)value;
 ......
}
(2)、编写类型转换文件,此文件名命名规则:ClassName-conversion.properties。
例如类名是LoginAction,则其对应的类型转换文件名称是LoginAction-conversion.properties。
在LoginAction-conversion.properties添加如下内容:
hyphen=com.xawx.struts2.converter.HyphenConverter
【key:Action中需要转换的属性名称】=【value:对应的类型转换器类全名】
(3)、LoginAction-conversion.properties文件的位置和LoginAction位置相同,即它们在同一个路径下面。


2、全局类型转换(例如:在不同Action中都有Hyphen类型成员变量)
编写类型转换文件,此文件名称是固定的,名称必须是xwork-conversion.properties,将该文件放在WEB-INF\classes\下。
在xwork-conversion.properties添加如下内容:
com.xawx.struts2.type.Hyphen=com.xawx.struts2.converter.HyphenConverter
【key:需要转换的属性的类的全名】=【value:对应的类型转换器类全名】
如果多个Action中用到了相同类型的属性,在进行类型转换时,宜用全局类型转换。


3、继承Struts2内置的类型转换器类org.apache.struts2.util.StrutsTypeConverter,转换器类需要重写该类中的两个方法:
Object convertFromString(Map context, String[] values, Class toClass)
String convertToString(Map context, Object o)


4、集合属性的转换
LoginAction有一个集合属性,此集合中存放某种类型的元素。


5、使用注解注册类型转换器
@TypeConversion(
 converter="com.xawx.web.converter.HyphenConverter"
)

分享到:
评论

相关推荐

    struts2数据类型转换器

    这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...

    struts2学习笔记三(第3讲.Struts2的类型转换)

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括MVC设计模式的实现、类型转换、国际化、拦截器等。在本篇“Struts2学习笔记三”中,我们将聚焦于Struts2的类型转换这一核心特性。类型转换在处理...

    struts2自定义类型转换器

    这就是"struts2自定义类型转换器"的主题。 首先,理解Struts2的类型转换机制。当Struts2接收到HTTP请求时,它会尝试将请求参数与Action类的属性进行绑定。这个过程涉及到了类型转换,Struts2内置了一套转换器机制,...

    struts2 类型转换器

    在Struts2中,类型转换器(Type Converter)是框架的一个关键特性,用于处理Action类中属性的自动类型转换。这个特性使得开发者无需手动进行数据类型之间的转换,从而提高了开发效率和代码的可读性。 标题中的...

    Struts2 ConverterType类型转换 案例源码

    Struts2是一个强大的MVC框架,它在处理用户请求时提供了丰富的功能,其中包括类型转换(Converter)。类型转换是Struts2框架中一个重要的特性,它允许我们把前端表单提交的数据自动转换为后端Java对象的属性。在这个...

    struts2简单实例(类型转换)

    Struts2框架提供了一种机制,即类型转换器(Type Converter),用于自动将请求参数转化为预期的数据类型。 在Struts2中,实现类型转换主要有两种方式: 1. 使用内置的类型转换器:Struts2已经内置了一些常见的类型...

    STRUTS2类型转换

    Struts2是一个流行的Java web开发框架,其核心是Action,而类型转换是Struts2处理用户输入数据的一个重要环节。Struts2内置了多种类型转换,可以将HTTP请求中的字符串数据转换为各种基本类型和复杂类型,如日期、...

    Struts2自定义类型转换

    Struts2提供了两种实现自定义类型转换器的途径: 1. **继承`ognl.DefaultTypeConverter`**:这是原始的类型转换器接口,提供基础的类型转换功能。 2. **继承`org.apache.struts2.util.StrutsTypeConverter`**:这是...

    struts2数据类型转换

    Struts2提供了两种主要的方式来实现自定义类型转换器: ##### 1. 基于OGNL的类型转换器 - **TypeConverter接口**:这是所有类型转换器都需要实现的一个接口。它定义了一个`convertValue`方法,该方法接收一些必要...

    struts2自定义数据类型转换练习

    本练习主要关注如何在Struts2中实现自定义的数据类型转换,以满足特定业务需求。 首先,我们需要了解Struts2的数据转换机制。当用户提交表单数据时,Struts2会通过ActionContext获取到这些数据,并尝试将其转换为...

    Struts2类型转换(一)----常规类型,自定义类型,错误处理

    Struts2是一个强大的MVC框架,它在处理Web应用程序时提供了许多便利,其中包括类型转换功能。类型转换是将用户输入的数据自动转化为服务器端处理所需的类型,这样可以避免手动转换带来的繁琐工作。本篇文章将深入...

    struts2.1数据类型转换2

    struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2

    实验4 Struts2的类型转换与OGNL表达式语言.doc

    ### Struts2的类型转换与OGNL表达式语言 #### 一、Struts2的类型转换类型 在Struts2框架中,类型转换是处理用户输入数据时的一个关键环节。Struts2支持多种内置的数据类型转换,同时也允许开发人员自定义类型转换...

    Struts处理类型转换错误,如时间转换

    在处理用户输入时,Struts2框架需要将请求参数转换为对应的Java对象属性,这个过程就涉及到类型转换。然而,当用户输入的数据格式不正确时,就会出现类型转换错误,例如在尝试将字符串转换为日期时。本篇文章将深入...

    struts2学习笔记3数据类型转换

    struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换

    Struts2 自定类型转换器(三十四)

    在Struts2框架中,自定义类型转换器是开发者为了满足特定需求,对框架默认的类型转换机制进行扩展的一种方式。Struts2允许我们创建自己的转换器类来处理输入数据,确保模型对象的属性能够正确地被转换为预期的数据...

    struts2的类型转换详解

    Struts2 的类型转换是其框架中的一个重要特性,它允许开发者轻松地将用户提交的字符串数据转换为应用程序所需的各类数据类型。在 MVC 框架中,用户输入的数据通常是字符串形式,而Java作为强类型语言,需要将这些...

    第2讲 --Struts2的类型转换

    本讲将深入探讨Struts2的类型转换机制及其在实际开发中的应用。 首先,我们理解一下为什么需要类型转换。在HTTP请求中,所有的数据都是以字符串形式传递的。例如,用户通过表单提交的数据,服务器接收到的都是字符...

Global site tag (gtag.js) - Google Analytics