struts2的一些用法(二):类型转换

struts2的类型转换,还算有点意思.这里就说一下吧!
转换器分为两种,一种是局部,一种全局;

1.局部转换器
     写一个自己创建的VO类,然后再写个转换类;
     转换类需要集成DefaultTypeConverte类,进而实现它的convertValue(Map context, Object value, Class toType)方法;
     最后配置properties文件,文件一定要放在action类的同一个包下;
     properties文件;
         名字:Action的类名-conversion.properties;
         内容:属性名=转换器类名,
         如:person=Vo.PersonConverter
        
     转换器:
  
  1. public class PersonConverter extends DefaultTypeConverter {
  2.     //必须继承DefaultTypeConverter类;    
  3.         public Object convertValue(Map context, Object value, Class toType) {
  4.         //toType,目标类型;value,转换成自定义的时候是数组;
  5.             if(toType.equals(Person.class)) {
  6.                 String[] vo = (String[]) value;
  7.                 String username= vo[0].split(",")[0];
  8.                 String password= vo[0].split(",")[1];
  9.                 
  10.                 Person person= new Person();
  11.                 person.setUsername(username);
  12.                 person.setPassword(password);
  13.                 return person;
  14.             }else if(toType.equals(String.class)) {
  15.             //此方法只有在,JSP界面中<s:property value="person" />才会调用此方法中的内容;
  16.               切记;
  17.                 Person person= (Person) value;
  18.                 return "["+person.getUsername()+","+person.getPassword()+"]";
  19.             }
  20.             return null;
  21.         }
   2.全局转发:
          与局部转发区别就是xwork-conversion.properties,他放在src的目录外面,配置如下:
          POJO.Person=conversion.PersonConverter
          bean路径      转换器类名
         
 3.简化转换器:
         让转换器继承StrutsTypeConverter类,他是DefaultTypeConverter的子类,将出出进进的两次转换分割开成两个方法,方便了一些,具体如下:

  1. public class PersonConverter extends StrutsTypeConverter {
  2.             public Object convertFromString(Map context, String[] vo, Class toType) {
  3.             //表单递交时,运行;
  4.                 String username= vo[0].split(",")[0];
  5.                 String sex= vo[0].split(",")[1];
  6.                 
  7.                 Person person= new Person();
  8.                 person.setUsername(username);
  9.                 person.setSex(sex);
  10.                 System.out.print("-----------");
  11.                 return person;
  12.             }
  13.     
  14.     
  15.             public String convertToString(Map arg0, Object value) {
  16.             //将值返回表现层的方法;s
  17.                 Person person= (Person) value;
  18.                 return "["+person.getUsername()+","+person.getSex()+"]";
  19.             }
  20.         }
  21.         
  4.设置对象中容器可以对应着多个数据转换:
         Action类中private List<Person> person; 进行对他的处理,因此而产生的简便处理;
         全局转换配置文件走toString,局部转换配置文件走转换类的输出方法;
         原理,通过list进行加载,故此list如果使用泛型,那么list内拥有多少个对象,便进入多少次数据转换类;并
                 且注意重点,他是有进无处的,,需要在他POJO类中定义它的toString方法;
         配置文件不变,:
         但是拥有两个变化:
         分别是:
  1.  转换类,
  2.             public class PersonConverter extends StrutsTypeConverter {
  3.                 public Object convertFromString(Map arg0, String[] value, Class arg2) {
  4.                         String x = value[0].split(",")[0];
  5.                         String y = value[0].split(",")[1];
  6.                         Person p= new Person();
  7.                         p.setX(x);
  8.                         p.setY(y);
  9.                 
  10.                     return p;
  11.                 }
  12.                 
  13.                 public String convertToString(Map arg0, Object value) {
  14.                     StringBuilder b =  new StringBuilder();
  15.                     return b.toString();
  16.                 }
  17.             }
  18.         POJO:
  19.             public class Person {
  20.                 private String x;
  21.                 private String y;
  22.                 ............
  23.                 public String toString() {
  24.                     return "x="+getX()+" y="+getY()+"";
  25.                 }
5.设置国际化资源文件,改变数据转换错误的信息:
            全局配置:
                struts.xml:
                <constant name="struts.custom.i18n.resources" value="messages" />
                //设置国际化资源文本文件:value是资源文本文件的文件名
               
               
                properties:
                xwork.default.invalid.fieldvalue={0}数据类型转换错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值