Struts2入门(三)——类型转换

一、前言

笔者一直觉得,学习一个知识点,你首先要明白,这东西是什么?有什么用?这样你才能了解。好了,不说废话。

1.1、类型转换为何存在?什么是类型转换?

在MVC框架中,都是属于表示层解决方案,都需要负责收集用户请求的参数,并且将请求参数传给应用的控制器组件,但是,这里有一个问题,客户端提交的请求参数都是字符串数据类型,而java这门语言本身就是强类型语言,所以我们需要类型转换,就是把字符串类型转化为你所需要的类型。

在MVC框架中,表示层数据处理分为两个方法:客户端输入数据,服务端输出数据;客户端输入数据需要进行类型转换才能确保我们的数据类型是正确的,服务端输出数据无需经过类型转换。

简单说就是:

在javaweb中,当你在jsp页面提交一个username到servlet中,你是否在通过request.getParameter("username")去获取数据;但是

如果是一个Date时间类型呢?你是否要先指定时间的转换格式,然后再根据request.getParameter("date");获取数据之后再去转换呢?但是,你想过没有?如果是多个页面请求数据的话,那你每次打getParameter();这个方法,累吗?你不累,程序都累了。所以,Struts2 为我们提供了一种类型转换器,只需要编写固定的操作就能得到你想要的数据,简单说来,就是把表单的数据赋值给实体类。

1.2、类型转换器简单介绍

1.2.1、类型转换器需要继承DefaultTypeConverter类,需要重写该类的convertType方法。

convertType方法的作用:

1、负责对类型的转换,不过这种转换是双向的,我们可以通过判断数据的类型判断转换的方向

2、该方法有三个参数:

context:是类型转换环境的上下文

value:    是需要转换的参数(随转换方向不同,如果字符串向实例转换时,它是字符串数组;如果实例字符串转换时,它是实例)

toType: 是转换后的目标参数

1.2.2、当然,你也可以继承StrutsTypeConverter是,它是Struts2为我们简化的类型转换器,是DefaultTypeConverter的子类,默认产生两个方法,更加明确的告诉你你要在哪个方法进行转换,这样就不用跟继承DefaultTypeConverter类一样,通过convertType方法里的参数toType每次去判断。继承StrutsTypeConveter该类比较简单。这里两种继承都有说到。

二、类型转换器

2.1、类型转换器有两种:局部类型转换器和全局类型转换器,就字面上的意思一样,全局和局部的。

关于类型转换器的注册方式有三种:

1、局部类型转换器仅仅对某个Action起作用

2、全局类型转换器对所有Action特定类型的属性都会起作用

3、我们可以通过注解的方式来生成类型转换器(JDK1.5以上的注解)

2.2、局部类型转换器:

新建实体类userbean: