类型转换

本文深入解析Struts2框架中类型转换的基本原理,包括如何使用框架自动转换页面表单数据,以及在转换失败时如何自定义类型转换器。特别介绍了自定义Date类型转换器的实现细节,并提供了基于字段和基于类的两种注册方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类型转换:

    *从页面中过去对应的内容

        *在动作类action中,声明与页面中表单name属性的值同名的属性。

        *提供get和set方法

        *struts2框架就会通过反射机制,从页面中获取对应的内容

    *struts2框架不能把页面中获取到的字符串转换成任何类型

    *当struts2框架不能把页面中获取到的字符串类型进行转换时,就需要自定义类型转换器

    *自定义类型转换器:

        *要么实现TypeConverter接口或者继承TypeConverter接口的实现类,我们继承DefaultTypeConverter类

        *重写convertValue(Object value,Class toType)()方法

            *参数"value":要转换的值

            *参数"toType":要转换的类型

        *具体代码实现:


public class DateConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Object value, Class toType) {
// TODO Auto-generated method stub
System.out.println("value:" + value);
System.out.println("totyoe:" + toType);
if(value==null){
return false;
}
if(toType==null){
return false;
}
if(toType!=java.util.Date.class){
return false;
}
if(value instanceof java.lang.String[]){
String [] str = (String[])value;
if(str[0]!=null&&str[0].length()>0){
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/mm/dd");
return sdf.parse(str[0]);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
/*
 * 在struts2框架里,自定义的类型转换器,
 * 如果我们不手动抛出异常,struts2框架值捕获异常,但是并不抛出。
 * 所以框架就会认为类型转换器类型转换成功,转向成功页面。
 */
throw new RuntimeException(e);
}
}
}
return new Date();
}

  

  *两种注册方式:

        *基于字段的(局部)

            *在动作类action同目录下,创建一个名为"UserAction-conversion.properties"的资源文件

            *UserAction为动作类action的名称

                *"-conversion.properties"是固定写法

            *其内容配置如下:

                createTime=cn.itcast.converter.DateConverter

        *基于类的(全局)

            *在src目录下,创建一个名为"xwork-converion.properties"的资源文件

                *该资源文件的名称是固定的

            *其内容配置如下:

                java.util.Date=cn.itcast.converter.DateConverter

  *如果在页面中数以一个不正确的值得时候,不手动抛出异常,页面依然转向成功页面


/*
 * 在struts2框架里,自定义的类型转换器,
 * 如果我们不手动抛出异常,struts2框架值捕获异常,但是并不抛出。
 * 所以框架就会认为类型转换器类型转换成功,转向成功页面。
 */

    *配置修改错误提示信息为中文

        *在动作类action同目录下,创建一个名为"converter.properties"的资源文件

        *该资源文件的配置如下:

            *针对所有字段:

                xwork.default.invalid.fieldvalue=类型转换失败"{0}"

            *转对某个字段:

                invalid.fieldvalue.createTime=出生日期转换失败

        *在struts.xml中进行配置

            <constant name="struts.custom.i18n.resources" value="cn.itcast.converter.convertert"></constant>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值