博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2类型转换和自定义类型
阅读量:4291 次
发布时间:2019-05-27

本文共 1600 字,大约阅读时间需要 5 分钟。

类型转换:就是把页面请求的参数转换成action类中所需要的类型;

Struts的常见的类型转换是通过struts的拦截器自动完成的,不需要我们额外配置,但是如果遇到不常见的类型转换,自动转换就会失败,这时就需要我们自定义类型转换器,来实现类型转换。

下面我们就来学习一下struts常见的类型转换的原理和我们自定义类型转换器时,都有哪些步骤。

 

一、struts常见的类型转换

在struts的传参过程中,struts帮助我们做了常见参数的类型转换,如:我们在浏览器中输入下面的url:

http://localhost:8080/Struts2_myConversion/type/test?name=jack&age=9

在http传参的时候,参数的类型都是string的,但是action类中age却是int类型的,所以需要将age从String转换成int。

 

所谓的类型转换,就是把字符串转为特定类型,或者是特定类型转为字符串。

特定类型转字符串好转(直接toString()就可以了),但是字符串转特定类型,情况就比较多了。

一般的特定类型struts2已经帮助我们解决了,但是特殊的类型,例如坐标点Point类型就不太好转。

这个是否就需要我们自定义转换器来实现坐标点Point的类型转换了。

二、自定义类型转换

我们介绍两种自定义类型转换方法,一种是局部转换器;一种是全局转换器。

我们假定浏览器中输入的url是:

p=3,4指的是坐标先得x坐标是3,y坐标是4。

a) 局部转换器:

     i. 原理:浏览器中输入上面的url,回车提交参数,struts2接到参数后,在struts2常见的类型转换中,没有找到对应的Point类型(这个Point类型是根据TestAction类中定义的private Point p,知道参数中的p是Point类型),因此,struts2会先到对应的名为test的action类的包下面找有没有这个action类名对应的转换文件(格式是:action类型-conversion.properties),如图:

在转换文件TestAction-conversion.properties中,找需要转换的参数名是否在转换文件中的name一栏,如图:

如果找到了,就进入到转换文件中的value一栏中的类中,把需要转换的参数对应的值传给转换器中的方法

convertValue(Map context, Object value, Class toType)中的形参value,把要转换的类型传给toType,如图是三个形参的值,分别对应三张图:

执行该方法,返回Point对象,类型从String转换Point完成,然后执行TestAction类的execute方法,如图:

执行完execute()方法后,struts2跳转到jsp页面,此时需要将Point类型转化为String类型,于是重新进入转换器类的convertValue方法,此时的toType(我们需要转换成的类型)是String类型,于是执行下图红框中的方法,

b) 全局转换器:

  i.  全局转换和局部转换的原理一样,不同的地方如下:

       1.全局转换的转换文件需要放在src下面;

       2.转换文件名称必须是:xwork-conversion.properties;

       3.如果全局转换文件在action包外面(通常情况下,action不会直接在src下,所以全局转换文件在action包外面的概率很大),需要指定action参数的具体路径,如:

.awt.Point=cn.edu.hpu.converter.MyPointConverter,

当然这里的配置如果是

p=cn.edu.hpu.converter.MyPointConverter

也可以正常找的到,

所以全局转换这两种配置都可以。

你可能感兴趣的文章
Const指针 、 指向const的指针 、引用、指针
查看>>
GDB调试命令
查看>>
常见数据类型的字节数
查看>>
gcc/g++ 编译常见问题
查看>>
【设计模式】 工厂模式实例 C++ , 利用工厂模式写一个计算器
查看>>
opencv
查看>>
【图像处理】 一、OSTU分割
查看>>
Android常用的框架有哪些
查看>>
SSL 证书创建与部署
查看>>
学习搭建人工智能环境遇到的问题
查看>>
自己编写的计算器
查看>>
视频物体检测
查看>>
Tomcat启动遇到的问题
查看>>
Gradle-gradlew
查看>>
grpc-整合gradle与代码生成
查看>>
grpc-gradle与grpc流程完美整合(3)
查看>>
设计模式-装饰模式(Decorator)
查看>>
git-子模块submodule
查看>>
设计模式-策略模式(Strategy)
查看>>
设计模式-观察者模式(Observer)
查看>>