struts2自定义类型转换器详解

本文深入探讨了Struts2框架中的类型转换机制,通过实现TypeConverter接口或使用DefaultTypeConverter,实现对请求参数的类型转换。介绍了局部和全局类型转换器的注册方式,以及如何利用注释进行注册。

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

         Struts2的类型转换是基于OGNL表达式的,由于请求的参数都是字符串,而JAVA 本身属于强类型的的语言,这样就需要把字符串转换成其他类型。主要通过以下2步完成:

         1.首先通过实现TypeCoverter接口或者继承DefaultTypeConverter实现类(该类实现了TypeCoverter接口)来实现自己的类型转换器(重写convertValue方法即可)

      (1) TypeCoverter接口:      

    public interfaceTypeConberter{
       public Object convertValue(Map context,Object target,Member member,String propertyName,Object value, Class toType)  
       {}
    }

      由于TypeCoverter接口太复杂,所以OGNL 项目还提供了一个实现该接口的类 :DefaultTypeConverter.

      (2) DefaultTypeConverter接口:   

    public class UserTypeConvert extends DefaultTypeConverter {
      @Override 
      public Object convertValue(Map<String, Object> context, Object value,   Class toType) { 
          return null;
      }
    }

     其中,context是类型转换环境的上下文,value是需要转换的参数,toType 是转换后的目标类型。

      eg:日期格式转换

       LoginAction.java: 

   public class LoginAction {
     private Date birthday;
     public Date getBirthday() {
         return birthday;
     } 
     public void setBirthday(Date birthday) {
         this.birthday = birthday;
     } 
     public String execute() throws UnsupportedEncodingException{
         return "success";
      }
   }

     DateTypeConvert.java: 

   public class UserTypeConvert extends DefaultTypeConverter  { 
     @Override 
     public Object convertValue(Map<String, Object> context, Object value, Class toType) 
     {
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMdd"); 
        try{
            if(toType == Date.class) { 
               String [] datevalue = (String [])value; 
               return dateformat.parse(datevalue[0]); 
            } else if(toType == String.class) { 
               Date datevalue = (Date)value;
               return dateformat.format(datevalue); 
            } 
        }catch (ParseException e){ 
            e.printStackTrace(); 
       }
       return null; 
     }
    }

2.将该转换器注册在WEB应用中,这样 Struts 2 框架才能使用该类型的转换器。

类型转换器的注册有 3种:

(1)注册局部类型转换器:仅仅对某个Action的属性起作用。

(2)注册全局类型的转换器:对所有Action 都有效。

(3)使用 JDK1.5 的注释来注册转换器。

局部类型转换器:

    在需要生效的Action类的包下放置ActionName-conversion.properties,其中 ActionName是需要转换生效的Action的类名,后面的-conversion固定。

   内容:  待转换的类型=类型转换器的全类名。 注意:类型转换器是需要加包名,而且最后不能加标点符号

    LoginAction-conversion.properties:

    birthday =convert.UserTypeConvert

全局类型转换器:

    在WEB-INF/class下放置xwork-conversion.properties文件。文件名是固定的。

    内容:待转换的类型 = 类型转换器的全类名

    xwork-conversion.properties:

    java.util.Date = convert.UserTypeConvert

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜之子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值