美文网首页
struts2类型转换介绍

struts2类型转换介绍

作者: pr0metheus | 来源:发表于2018-05-12 19:58 被阅读0次

1. ActionSupport介绍

我们自定义一个Action的时候,通常需要继承ActionSupport,因为ActionSupport实现了一系列的接口,也就是说通过继承它,我们可以很方便的实现一些功能,例如:国际化、数据校验

2. DefaultTypeConverter介绍

我们自定义开发的类型转换器需要直接或间接继承它,才能够被struts2框架调用

3. StrutsTypeConverter介绍

struts2自带的类型转换器的父类,继承了DefaultTypeConverter,也就是说对DefaultTypeConverter进行了优化,通过继承它更方便开发者开发自己的类型转换器

4. 自定义局部转换器实现步骤

首先要说明StrutsTypeConverter底层使用的就是DefaultTypeConverter,所以我们自定义的类型转换器不管是继承谁,其实现机理是不变的

  1. 新建一个package,并在该包下新建一个类,该类要继承DefaultTypeConverter

  2. 覆盖convertValue(Map<String, Object> context, Object value, Class toType)方法

  3. 编写convertValue方法中的核心逻辑

  4. 在需要进行类型转换的Action所在的包下新建一个properties文件,该文件的命名要遵循如下规则:

ActionName-conversion.properties

  1. 在ActionName-conversion.properties文件中输入key/value,该key是Action中需要进行类型转换的属性名(准确的说是该属性所对应的方法名的后缀,即setXXX中的xxx)而value为之前新建的类型转换器的全限定名

这样当struts2处理http请求的时候,当发现有符合条件的自定义类型转换器的时候,就会使用该转换器进行类型转换,并将转换后的结果,注入到Action对应的属性中,同理当需要将该Action的属性输出到页面上的时候,也会经过我们自定义的类型转换器,从而将java对象以字符串的形式输出到页面上

5. 自定义全局转换器步骤

  1. 新建一个package,并在该包下新建一个类,该类要继承DefaultTypeConverter

  2. 覆盖convertValue(Map<String, Object> context, Object value, Class toType)方法

  3. 编写convertValue方法中的核心逻辑

  4. 在src目录下新建一个properties文件,该文件的命名格式如下:

xwork-conversion.propreties

  1. 在该属性文件中键入key/value,kay的值为需要进行类型转换的属性的类型,value的值还是自定义类型转换器的全限定名

6. 类型转换器生效优先级

局部类型转换器优先级高于全局类型转换器,换言之,当都符合条件的情况下,局部类型转换器会生效而全局类型转换器不会生效

7. 实战练习

7.1. 练习一

现有一个前端页面代码如下所示:

前台页面.png

当我在user文本框中输入"hello;world"并点击提交的时候,要求能够自动注入到UserAction中的User类型的user属性中,并且将该值输出在output.jsp中

实现步骤:

  1. 首先新建一个package命名为com.shengsiyuan.action
  2. 在该包下新建一个类命名为UserAction并继承ActionSupport类
  3. UserAction类中包含属性-user:User 并生成setter/getter方法
  4. 在该类下覆盖+ execute():String 方法,并返回SUCCESS
  5. 新建一个package命名为com.shengsiyuan.model,并在该包下新建一个类命名为User,该类包含两个属性-username:String -password:String 并生成setter/getter方法
  6. 新建一个package命名为com.shengsiyuan.converter,并在该包下新建一个类UserActionUserConverter,该类继承DefaultTypeConverter,并覆盖及实现方法convertValue,具体代码如下:
自定义转换器.png
  1. 在 com.shengsiyuan.action包下新建属性文件UserAction-conversion.properties,该属性文件中的内容为user=com.shengsiyuan.converter.UserActionUserConverter
  2. 新建output.jsp文件,该jsp文件使用struts标签库,并将UserAction中的user进行输出,具体实现如下图所示:
output.jsp.png

测试:

首先访问login_1.jsp:

login_1.jsp.png

点击提交后:

result.png

测试结果:成功

小结:自定义转换器的实现主要由Action、Model、自定义转换器、属性文件构成

7.2. 练习二

现有如下页面:

前台页面.png

要求:该表单提交后,四个文本框的值能够自动注入到UserAction对象的属性- userList:List<User>中,然后跳转到output.jsp中并输出这四个文本框的值

实现步骤:

实现步骤与练习一相似,提几个注意点:

  1. UserAction中的属性应该定义为List<User>类型,如下图所示:
UserAction.png
  1. 自定义转换器中要进行代码调整,这里使用StrutsTypeConverter,为了演示不同的形式罢了,如下图所示:
自定义转换器代码.png

8. 总结

自定义类型转换器还是比较麻烦的一件事情,在使用spring框架的时候就没有这种问题,看来spring框架对此进行了封装或改良,但我想类型转换这一块底层的实现应该差不多吧,系统学习spring的时候再看吧

9. 内容引用来源

<< 张龙JavaEE视频>>

相关文章

  • Struts2类型转换技术

    1. Struts2 类型转换使用介绍 Struts2的类型转换几乎支持Java中各种数据类型的转换。甚至开发者还...

  • 类型转换

    1、Struts2内建类型转换器对于大部分常用类型,开发者根本不需创建自己的转换器,Struts2内置了常见数据类...

  • Struts2学习笔记(第二天)

    .struts2中获取请求参数 扩展(一般不用,原理为ognl表达式) struts2中提供的类型转换 自定义类型...

  • struts2类型转换介绍

    1. ActionSupport介绍 我们自定义一个Action的时候,通常需要继承ActionSupport,因...

  • Struts2中类型转换配置

    类型转换:将jsp页面的请求参数进行类型的转换后再赋值给action的属性 Struts2已经内建了对于Strin...

  • Struts2拦截器详解

    在 Struts2 框架中,拦截器是其重要的组成部分,Struts2 的很多功能(数据校验、对象类型转换、文件上传...

  • JavaWeb编程实战宝典(8)___第8章 Struts2的类

    第8章 Struts2的类型转换 8.1 为什么要进行类型转换 8.1.1 了解客户端和服务端之间的数据处理过程 ...

  • 7.类型转换、消息处理与国际化

    7.类型转换、消息处理与国际化 @(10_Struts2)[JavaEE, Struts2] 前边我们说过了 Ht...

  • 第13篇:C++多态中的Downcast操作

    上一篇我们介绍了与动态绑定伴随的upcast类型转换,这是一种符合类型安全的类型转换操作。本篇还将介绍有关down...

  • JS隐式数据类型转换

    隐式数据类型转换介绍 前面有总结过 JS数据类型转换 Number(), toString(), parseInt...

网友评论

      本文标题:struts2类型转换介绍

      本文链接:https://www.haomeiwen.com/subject/zijhdftx.html