【转】struts2 Type Conversion 自定义类型转化

转自:http://blog.csdn.net/ziyunyangyong/article/details/7761277

在web的视图展现之中,所有的类型都表现为string类型,即“弱类型”,而在java世界里,所有的对象都表现为强类型,所以,一个框架必须解决字符串到java强数据类型的转化,而且2者必须可逆。

我们平时遇到的大部分基本类型的转化,struts2都能自动帮我们完成,但开发之中总免不了自定义格式的转化。

一.首先,来看看struts2对基本类型的转化:

测试实体:

[java]  view plain copy
  1. package com.model;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import com.zizhu.DateUtils;  
  6.   
  7. public class User {  
  8.       
  9.     private int id ;  
  10.     private String name = null;  
  11.     private int age ;  
  12.     public char sex ;  
  13.     public double price;  
  14.     public float servicePrice;  
  15.     public char sex2;  
  16.       
  17.     private Date birthday = null;  
  18.       
  19.     public char getSex2() {  
  20.         return sex2;  
  21.     }  
  22.     public void setSex2(char sex2) {  
  23.         this.sex2 = sex2;  
  24.     }  
  25.     public int getId() {  
  26.         return id;  
  27.     }  
  28.     public void setId(int id) {  
  29.         this.id = id;  
  30.     }  
  31.     public String getName() {  
  32.         return name;  
  33.     }  
  34.     public void setName(String name) {  
  35.         this.name = name;  
  36.     }  
  37.     public Date getBirthday() {  
  38.         return birthday;  
  39.     }  
  40.     public void setBirthday(Date birthday) {  
  41.         this.birthday = birthday;  
  42.     }  
  43.     public char getSex() {  
  44.         return sex;  
  45.     }  
  46.     public void setSex(char sex) {  
  47.         this.sex = sex;  
  48.     }  
  49.     public double getPrice() {  
  50.         return price;  
  51.     }  
  52.     public void setPrice(double price) {  
  53.         this.price = price;  
  54.     }  
  55.     public float getServicePrice() {  
  56.         return servicePrice;  
  57.     }  
  58.     public void setServicePrice(float servicePrice) {  
  59.         this.servicePrice = servicePrice;  
  60.     }  
  61.     public int getAge() {  
  62.         return age;  
  63.     }  
  64.     public void setAge(int age) {  
  65.         this.age = age;  
  66.     }  
  67.     @Override  
  68.     public String toString() {  
  69.         return "User [age=" + age + ", birthday=" + DateUtils.format(birthday, "yyyy-MM-dd HH:mm:ss") + ", id=" + id  
  70.                 + ", name=" + name + ", price=" + price + ", servicePrice="  
  71.                 + servicePrice + ", sex=" + sex + ", sex2="+sex2+"]";  
  72.     }  
  73.       
  74. }  

以上的基本类型(除开Date类型),struts2都能很好的帮我们顺利完成转化,我们不需要操心;而特殊情况 birthday,实际上struts2也能帮我们进行转化,但格式必须要求是SHORT的日期格式,我测试了一下,这么指定可以转化成功:12-07-19,转化之后为2012年7月19日


二.自定义类型的转化:

针对上面的Date类型,我们进行自定义格式来实现转化

第一步:定义一个转化的配置文件:xwork-conversion.properties

[html]  view plain copy
  1. java.util.Date=com.utils.DateConvert  
第二步:指定这个实现类:

[java]  view plain copy
  1. package com.utils;  
  2.   
  3. import java.util.Date;  
  4. import java.util.Map;  
  5.   
  6. import org.apache.struts2.util.StrutsTypeConverter;  
  7.   
  8.   
  9. public class DateConvert extends StrutsTypeConverter {  
  10.   
  11.     @Override  
  12.     public Object convertFromString(Map context, String[] values, Class toClass) {  
  13.         if(values != null && values.length > 0){  
  14.             return DateUtils.parse(values[0], "yyyy-MM-dd");  
  15.         }  
  16.         return null;  
  17.     }  
  18.   
  19.     @Override  
  20.     public String convertToString(Map context, Object o) {  
  21.         if(o instanceof Date){  
  22.             return DateUtils.format((Date)o, "yyyy年MM月dd日");  
  23.         }  
  24.         return null;  
  25.     }  
  26.       
  27. }  

只要我们规定的格式是2012-07-19的格式,就能转化成功

页面的输入代码:

[html]  view plain copy
  1. <s:form action="hello">  
  2.         <s:textfield label="姓名" name="user.name"></s:textfield>  
  3.         <s:textfield label="年龄" name="user.age"></s:textfield>  
  4.         <s:radio label="性别" list="@com.model.SexEnum@enmu2Coll()" name="user.sex"></s:radio>  
  5.         <s:textfield label="性别2" name="user.sex2"></s:textfield>  
  6.         <s:textfield label="出生日期" name="user.birthday"></s:textfield>  
  7.         <s:textfield label="价格" name="user.price"></s:textfield>  
  8.         <s:textfield label="服务费用" name="user.servicePrice"></s:textfield>  
  9.         <s:submit></s:submit>  
  10.     </s:form>  

需要注意的是那个 sex2输入框,User对象是char类型的,而这边输入的是字符串,这个时候strut2只会取第一个字符,后面的直接省略掉了

输出结果:User [age=1, birthday=2012-02-01 00:00:00, id=0, name=a, price=0.0, servicePrice=0.0, sex=男, sex2=女]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值