Struts 2之类型转换器

本文详细介绍了Struts2中自定义类型转换器的开发步骤,包括局部类型转换器和全局类型转换器的实现。通过示例代码展示了如何在Action类中使用类型转换器,以及如何在全局配置文件中设置类型转换器。

Struts2自定义类型转换器分为局部类型转换器和全局类型转换器

(1)局部类型转换器

如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一种类型转换器供我们使用。

以下为局部类型转换器的开发步骤

a.首先要写一个类来继承DefaultTypeConverter

b.然后覆盖convertValue这个方法,在里面进行数据转型

c.在action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是类名,后面的-conversion.properties是固定的写法,

如:HelloWorldAction-conversion.properties

d.Properties文件里面的内容为:属性名称=类型转换器的全类名(既包名.类名)

如:birthday=com.ljq.type.converter.DateTypeConverter

(2)全局类型转换器

如果业务需求所有的日期都要转换,则可以使用全局类型转换器,只要在src根目录下面放置xwork-conversion.properties文件,并且properties文件中的内容为:

待转换的类型=类型转换器的全类名

如:java.util.Date =com.type.Converter.DateTypeConverter 即可

DefaultTypeConverter

日期转换器

  1. public classDateTypeConverter extends DefaultTypeConverter{ 
  2.   
  3.       public Object convertValue(Map<String, Object> context, Object value, 
  4. Class toType) { 
  5.       SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); 
  6.              try
  7.                     if (toType == Date.class) {// 当字符串向Date类型转换时 
  8.                            //页面传递过来的参数被封装成了String[] 
  9.                            String[] params =(String[]) value; 
  10.                            returnsdf.parseObject(params[0]); 
  11.                     } else if (toType ==String.class) { // 当Date转换成字符串时 
  12.                            Datedate=(Date)value; 
  13.                            returnsdf.format(date); 
  14.                     } 
  15.              } catch (java.text.ParseException e) { 
  16.                     e.printStackTrace(); 
  17.              } 
  18.                     return null
  19.              } 
public classDateTypeConverter extends DefaultTypeConverter{
 
      public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
             try {
                    if (toType == Date.class) {// 当字符串向Date类型转换时
                           //页面传递过来的参数被封装成了String[]
                           String[] params =(String[]) value;
                           returnsdf.parseObject(params[0]);
                    } else if (toType ==String.class) { // 当Date转换成字符串时
                           Datedate=(Date)value;
                           returnsdf.format(date);
                    }
             } catch (java.text.ParseException e) {
                    e.printStackTrace();
             }
                    return null;
             }
}

对象转换器

  1. import ognl.DefaultTypeConverter; 
  2. public classUserConverter extends DefaultTypeConverter {  
  3.   
  4.     @Override  
  5.     public Object convertValue(Map context,Object value, Class toType) {  
  6.          //从页面转到服务器 toType表示要转化的类型, 
  7.         if (toType==User.class) {  
  8.             /*页面传递过来的参数被封装成了String[]*/  
  9.             String[] params = (String[])value;  
  10.             User user = new User();  
  11.             /*取出user字符串,按,分割成数组*/  
  12.             String[] uservalues = params[0].split(",");  
  13.             user.setName(uservalues[0]);  
  14.             user.setPass(uservalues[1]);  
  15.             return user;  
  16.         }  
  17.         /*从服务器转到页面,显示user参数值,则要转换成字符串*/  
  18.         else if (toType==String.class) {  
  19.             User user =(User)value;  
  20.             return "姓名:"+user.getName()+", 密码:"+user.getPass();  
  21.         }  
  22.         return null;  
  23.     }  
  24. }   
import ognl.DefaultTypeConverter;
public classUserConverter extends DefaultTypeConverter { 
 
    @Override 
    public Object convertValue(Map context,Object value, Class toType) { 
         //从页面转到服务器 toType表示要转化的类型,
        if (toType==User.class) { 
            /*页面传递过来的参数被封装成了String[]*/ 
            String[] params = (String[])value; 
            User user = new User(); 
            /*取出user字符串,按,分割成数组*/ 
            String[] uservalues = params[0].split(","); 
            user.setName(uservalues[0]); 
            user.setPass(uservalues[1]); 
            return user; 
        } 
        /*从服务器转到页面,显示user参数值,则要转换成字符串*/ 
        else if (toType==String.class) { 
            User user =(User)value; 
            return "姓名:"+user.getName()+", 密码:"+user.getPass(); 
        } 
        return null; 
    } 
}  

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值