Struts2类型转换

1、 struts2内部提供大量类型转换器,用来完成数据类型转换问题

boolean 和 Boolean

char和 Character

int 和 Integer

long 和 Long

float 和 Float

double 和 Double

Date 可以接收 yyyy-MM-dd格式字符串

数组  可以将多个同名参数,转换到数组中

集合  支持将数据保存到 List或者 Map集合

案例: 输入合法年龄和生日可以自动转换

当输入abc 转换为 int类型age时

Caused by: java.lang.NoSuchMethodException: cn.itcast.struts2.demo3.CustomerAction.setAge([Ljava.lang.String;

分析: 输入20,转换 int类型20  --- setAge(int)

输入abc,转换int出错 ---- setAge(String) -----报错方法不存在异常

自定义类型转换器

1) 自定义类型转换器

第一种 实现TypeConverter接口

convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object target, java.lang.reflect.Member member, java.lang.String propertyName, java.lang.Object value, java.lang.Class toType) 

第二种 继承 DefaultTypeConverter

convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object value, java.lang.Class toType) 

第三种 继承 StrutsTypeConverter

 convertFromString(java.util.Map context, java.lang.String[] values, java.lang.Class toClass)  --- 请求封装convertToString(java.util.Map context, java.lang.Object o)   --- 数据回显 

类型转换器 一直都是双向转换

页面提交请求参数,封装到model --- 需要转换

model数据 需要在页面 回显  ----需要转换

2) 以 1990/10/10为例,自定义日期转换器,完成转换

 public Object convertValue(Map<String, Object> context, Object value,Class toType) {// 根据toType判断 是请求封装 还是 数据回显DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");if (toType == Date.class) {// 请求参数封装 (value是字符串)String[] params = (String[]) value;String strVal = params[0]; // 转换为 日期类型try {return dateFormat.parse(strVal);} catch (ParseException e) {e.printStackTrace();}} else {// 回显(value是 Date)Date date = (Date) value;return dateFormat.format(date);}return null;}

3) 注册类型转换器

局部注册 :只对当前Action有效 (针对属性)

全局注册 :针对所有Action的日期类型有效 (针对类型 )

局部注册 :在Action类所在包 创建 Action类名-conversion.properties ,格式 : 属性名称=类型转换器的全类名

全局注册 :在src下创建 xwork-conversion.properties,格式 : 待转换的类型=类型转换器的全类名

类型转换错误处理

通过分析拦截器作用,得知当类型转换出错时,自动跳转input视图 ,在input视图页面中<s:fieldError/> 显示错误信息

在Action所在包中,创建ActionName.properties,在局部资源文件中配置提示信息 :invalid.fieldvalue.属性名=错误信息

struts2教程(4)--类型转换相关推荐

  1. struts2教程_Struts 2教程– Struts2教程

    struts2教程 Welcome to Struts 2 Tutorial index post. Struts 2 is one of the mostly used Java Web Appli ...

  2. java js 转换_[Java教程]javascript 类型转换。

    [Java教程]javascript 类型转换. 0 2016-10-11 18:00:06 目录: 1 : 伪对象 2 : 转换为字符串 3 : 数字转字符串 4 : 转换为数字 5 : 转换为Bo ...

  3. Struts2中的类型转换

    1.     Struts2中的类型转换 我们知道通过HTTP提交到后台的数据,都是字符串的形式,而我们需要的数据类型当然不只字符串类型一种.所以,我们需要类型转换! 在Struts2中,类型转换的概 ...

  4. Struts2教程3:struts.xml常用配置解析

    在本文中将详细讲述struts.xml文件的常用配置及注意事项. 1.        使用<include>标签重用配置文件 在Struts2中提供了一个默认的struts.xml文件,但 ...

  5. Struts2教程1:第一个Struts2程序

    在本系列教程中我们将学习到Struts2的各种技术.在本教程中使用的工具和程序库的版本如下: 开发工具:MyEclipse6 Web服务器:Tomcat6 Struts版本:Struts2.0.11. ...

  6. struts2教程(7)--拦截器

    Struts2拦截器 一.拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链 ...

  7. struts2教程(5)--请求参数校验

    一.请求参数校验介绍 校验的分类 :客户端数据校验 和服务器端数据校验 客户端数据校验 ,通过JavaScript完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,使用框架内置校验功能( ...

  8. struts2教程--快速入门

    Struts2框架介绍 1.三大框架 : 是企业主流 JavaEE开发的一套架构 Struts2 + Spring + Hibernate 2. 什么是框架?为什么要学框架 ? 框架 是 实现部分功能 ...

  9. struts2之token,类型转换和数据校验

    文章目录 1 Token防重 1.1 token内部原理 1.2 实现步骤 1.2.1 在页面中添加标签 1.2.2 配置strtus.xml配置 2 类型转换器 2.1 Struts2类型转换 2. ...

最新文章

  1. python中map函数运行原理_Python中map函数的解释和可视化
  2. linux下开发python爬虫_linux入门教程—开发常用命令
  3. 视觉位姿测量精度的影响因素分析(Camera Pose Estimation)
  4. rust怎么用items刷东西_rust服主怎么刷东西 | 手游网游页游攻略大全
  5. 变量提升、作用域this实战(真题:看代码输出)
  6. java代码块是什么_Java代码块
  7. oracle配置ipv6_配置 IPv6 接口
  8. Android 4.1初识--7月13号
  9. paip.系统无法在消息文件中为 Application 找到消息号为 0x2350 的消息文本。服务器存储空间不足,无法处理此命令
  10. selenium+java自动化测试环境搭建mac
  11. 备战数学建模48-数学规划模型终结篇(全)(攻坚战13)
  12. C#创建Windows窗体应用程序实例8【通用对话框】
  13. 网络天空、诺维格、高波、爱虫病毒专杀工具 040421 下载
  14. cad灯具图标_灯具在CAD中怎么表示出来 都代表哪种灯 谢谢
  15. underscore.js 964 --- 1103行
  16. Win11无线网络适配器显示感叹号怎么办
  17. ESXi8.0中NVME硬盘不识别解决方法1,设置直通
  18. windows7自带摄像头拍照摄像软件
  19. 雅思听力常见人名及地名(常考,必备)
  20. 【转】PHP乱码问题,UTF-8(乱码)

热门文章

  1. BLE安全机制从入门到放弃
  2. 强化学习—— TD算法(Sarsa算法+Q-learning算法)
  3. socket通信(5)4次挥手
  4. C++ Primer 5th笔记(chap 13 拷贝控制)三五法则
  5. java元婴期(22)----java进阶(mybatis(1)---mybatis框架概述入门程序)
  6. python常用指令速查
  7. (3)段描述符,段选择子,LES指令
  8. 【MySQL】记录 Navicat连接 docker mysql 容器,备份docker mysql 注意事项
  9. 9、 InnoDB行锁
  10. 4、MySQL设置事务自动提交(开启和关闭)