文档章节

自定义类型转换器,转换过程中的错误处理

day戴
 day戴
发布于 2014/07/23 10:45
字数 792
阅读 45
收藏 0

 参数封装过程中,数据类型转换问题
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) ----- 报错方法不存在异常

2、 自定义类型转换器 (了解)
 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 , 格式 : 属性名称=类型转换器的全类名
 代码体现:Login-conversion.properties:birthday=类型转换器全名
 全局注册 : 在src下创建 xwork-conversion.properties ,格式 : 待转换的类型=类型转换器的全类名
 代码体现:xwork-conversion.properties:java.util.Date=类型转换器全名

 
3、 类型转换中错误处理
1引入struts标签:
<%@ taglib uri="/struts-tags" prefix="s"%>
2通过分析拦截器作用,得知当类型转换出错时,自动跳转input视图 ,在input视图页面中 <s:fieldError/> 显示错误信息 
3* 在Action所在包中,创建 ActionName.properties,在局部资源文件中配置提示信息 : invalid.fieldvalue.属性名= 错误信息(在name和value里配置,可配置中文错误信息)

4. 请求数据有效性校验
1、 校验的分类 : 客户端数据校验 和 服务器端数据校验
客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 )
服务器数据校验 ,使用框架内置校验功能 (struts2 内置校验功能 ) ----- 必须的

2、 struts2 支持校验方式
代码校验 :在服务器端通过编写java代码,完成数据校验
配置校验 :XML配置校验(主流) 和 注解配置校验

© 著作权归作者所有

day戴
粉丝 0
博文 46
码字总数 42402
作品 0
南汇
程序员
私信 提问
Java程序员从笨鸟到菜鸟之(四十四)细谈struts2(七)数据类型转换详解

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 Web应用程序的交互都是建立在HTTP之上的,互相传递的都是字符串。也就是说服务器接收到的来自用户的数据只能...

长平狐
2012/11/12
79
0
struts2 类型转换

从表单提交的数据全是字符串,在数据到达Action类前会有拦截器先对表单请求进行处理,其中参数拦截器完成表单数的类型转换,但struts2在提供简单的数据转换功能,并不能完全满足实际需求。比...

iborder
2016/12/20
32
0
Java Server Faces (JSF) 页面转换与验证(一)

由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统、详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还...

码上中国博客
2015/02/03
518
0
【六 处理JSON】 1. JSON基础

JSON基础 现代的web应用一般都面临大量的JSON(JavaScript Object Notation)格式的数据操作。为此Play提供了JSON库。 JSON是一种轻量级的数据交换格式,一个典型的JSON结构如下所示: 点击这...

Landas
03/09
41
0
Spring MVC学习笔记(二)

在方法参数上使用@ModelAttribute表明参数的值需要从model中获取。如果model不存在,参数应当首先被实例化然后添加进model。一旦model存在,参数的属性需要从名称匹配的请求参数中获取。 示例...

第五郎
2014/03/21
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
24分钟前
7
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
55分钟前
10
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
56分钟前
10
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
今天
8
0
深入了解Redis底层数据结构

说明 说到Redis的数据结构,我们大概会很快想到Redis的5种常见数据结构:字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted Set),以及他们的特点和运用场景。不过它们是...

TurboSanil
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部