1.  继承DefaultTypeConverter接口

继承DefaultTypeConverter的接口是地,需要去实现的方法是convertValue(Map context,Object value,Class toType).这个方法该方法作用最简单,负责完成类型的转换,不过这种转换是双向的。toType类型是需要转换的目标类型,当toType类型是User类型时,表明需要将字符串转换为User的实例,当toType是String类型时,表明需要将User类型转换为字符串类型。convertValue方法中还有两个参数,context是代表类型转换环境的上下文,value是需要转换的参数。下面笔者通过个例子来说明。

1)        创建个LoginAcction.java的类。

 public class LoginAction extends ActionSupport
{private User user;// 省略user的setter和getter方法public String execute() throws Exception{if (getUser().getName().equals("owen")&& getUser().getPass().equals("owen") ){addActionMessage("登录成功!");return SUCCESS;}addActionMessage("登录失败!!");return ERROR;}
}

2)        注册类型转换器的局部类型转换器。

  #指定Action的user属性需要使用UserConverter类来完成类型转换
user=com.owen.app.converter.UserConverter

3)        定义转换器,即User的转换器。

 public class UserConverter extends DefaultTypeConverter
{// 类型转换器必须重写convertValue方法,该方法需要完成双向转换public Object convertValue(Map context, Object value, Class toType){// 当需要将字符串向User类型转换时if (toType == User.class ){// 系统的请求参数是一个字符串数组String[] params = (String[])value;// 创建一个User实例User user = new User();// 只处理请求参数数组第一个数组元素,// 并将该字符串以英文逗号分割成两个字符串String[] userValues = params[0].split(",");// 为User实例赋值user.setName(userValues[0]);user.setPass(userValues[1]);// 返回转换来的User实例return user;}else if (toType == String.class ){// 将需要转换的值强制类型转换为User实例User user = (User) value;return "<" + user.getName() + ","+ user.getPass() + ">";}return null ;}
}

2. 继承StrutsTypeConverter接口

实现这个接口将要实现两个方法:convertFromString()和convertToString()的方法。当需要把字符串转换成复合类型时,调用convertFromString()方法,当复合类型转换为字符串时,调用convertToString()方法。

1)        User的转换器,UserConverter.java

  public class UserConverter extends StrutsTypeConverter
{// 实现将字符串类型转换成复合类型的方法public Object convertFromString(Map context, String[] values , Class toClass){// 创建一个User实例User user = new User();// 只处理请求参数数组第一个数组元素,// 并将该字符串以英文逗号分割成两个字符串String[] userValues = values[0].split(",");// 为User实例赋值user.setName(userValues[0]);user.setPass(userValues[1]);// 返回转换来的User实例return user;}// 实现将复合类型转换成字符串类型的方法public String convertToString(Map context, Object o){// 将需要转换的值强制类型转换为User实例User user = (User) o;return "<" + user.getName() + ","+ user.getPass() + ">";}
}

2)        这次使用注册类型转换器的全局类型转换器。

 #指定com.owen.omain.User类型需要
#使用UserConverter类来完成类型转换
com.owen.app.domain.User=com.owen.app.converter.UserConverter

3)        其它的同上一个例子。

3. 总结

看了以上的例子,我们可以知道什么是转换器,其实实它就是在访问某个对象昌,先被Struts2拦截下来处理,然后将处理的结果将给后端的Action做处理。只是在使用时我们明确是调用复合类型转换为字符串还是将字符串转换为复合类型。

Struts2之自定义转换器相关推荐

  1. 【struts2】struts2实现自定义数据类型转换器

    JSP提交的数据全部都是String类型的.struts2也是通过request.getParameter(name)获取到String类型数据,并通过拦截器将String转换成各种常用的数据类型,如 ...

  2. java list 自定义类型转换_java – 可以从List生成平面XML结构的XStream自定义转换器?...

    我正在使用XStream,并且有一个类如下的字段: private Map data; 我想生成这样的XML输出: test data test data test data 所以我希望map键成为元 ...

  3. Flask自定义转换器,实现路由匹配正则表达式参数

    Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式 1 # ...

  4. 【Flask】自定义转换器

    Flask中提供的转换器 DEFAULT_CONVERTERS = { 'default': UnicodeConverter, 'string': UnicodeConverter, 'any': ...

  5. java converter转换器_springboot 自定义转换器(converter)

    springboot 自定义转换器(converter) 应用:实现一对一转换,如将字符串转换为pojo.枚举等 *********************** 相关类与接口 Converter @F ...

  6. struts2学习笔记之十一:struts2的类型转换器

    Struts2的类型转换器 如何实现Struts2的类型转换器? * 继承StrutsTypeConverter * 覆盖convertFromString和convertToString 注册类型转 ...

  7. java dozer_java – Dozer双向映射(String,String)与自定义转换器不可能?

    我有一个自定义转换器的推土机映射: com.xyz.Customer com.xyz.CustomerDAO customerName customerName 和转换器: public class ...

  8. java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)

    九.数据绑定流程分析 1.提出问题 日期字符串格式的表单参数,提交后转换为Date类型 <!--    解决问题: 1.数据类型转换 2.数据格式 3.数据校验 --> BirthDay ...

  9. easyexcel的动态表头和自定义转换器

    https://www.yuque.com/easyexcel/doc/easyexcel 依赖 <dependency><groupId>com.alibaba</gr ...

  10. springMVC学习笔记(自定义转换器)

    springMVC 非常的灵活,它帮我们内置了转换器,比如我们从页面传到后台参数的都是String 类型的,但是我们可以这样接受: @PathVariable("Id") Inte ...

最新文章

  1. mapreduce将key相同的value结合在一起_个人理解Hadoop中MapReduce
  2. python下载安装教程3.7.3-【最新】Python-3.7.0安装教程及下载链接
  3. 利用KD树进行异常检测
  4. Segment,Path,Ring和Polyline对象
  5. php地理位置辐射范围,基于路网距离的城市辐射范围确定方法
  6. 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数
  7. HDU 1151 Air Raid
  8. win7下还原快捷方式的打开方式
  9. 一阶惯性环节如何实现跟踪性能与滤波性能共存(三)
  10. 编译ffmpeg报错ffmpeg yasm not found, use --disable-yasm for a crippled build
  11. miui9如何不自动杀进程,小米9怎么关闭自动更新 具体操作方法解析
  12. python繁简体转换
  13. 【论文笔记】RRU-Net: The Ringed Residual U-Net for Image Splicing Forgery Detection
  14. JAVA面向对象学习——java面向对象概念———接口
  15. Windows查看ssh公钥方法
  16. PR从入门到精通免费视频教程
  17. 前端面试题---2022
  18. Harbor容器安装以及相关特性部署与使用(SSL证书+AD域)
  19. ntlm java_Java Web服务NTLM身份验证
  20. Spring中的PathVariable注释

热门文章

  1. 【t098】符文之语
  2. 开源协议的几种类型认识
  3. spring配置文件详解
  4. IOS为UIImageView图片添加点击事件
  5. The GenerateResource task failed unexpectedly. a generic error occured in GDI+
  6. 一个简单的EXCEL 导入SQL 的例子
  7. LAMP架构之编译安装MySQL和PHP
  8. Security+ 学习笔记49 事件调查
  9. NP、OSPF Stub区域
  10. C++ 从入门到入土(English Version)Section 6: Pointers and Call by Reference