struts2教程(4)--类型转换

Struts2类型转换

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

boolean Boolean

charCharacter

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.属性名=错误信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值