• struts之类型转换


    Struts2的内置类型转换器:

    Struts2的内置类型转换器,可以为你处理大多数的类型转换,这包括了以下类型和String类型之间的转换!

    1.String

    将int,double,boolean,String类型的数组或java.util.Date类型转换成字符串。

    2:boolean和Boolean

    在字符串与boolean之间转换

    3:char/Character

    在字符串和字符之间转换

    4:int/Integer,float/Float,long/Long,double/Double

    在字符串与数值类型之间进行转换

    5:date

    在字符串和日期类型之间进行转换,对于日期类型,采用SHORT格式来进行处理,使用当前请求关联的Locale的格式

    6:array

    由于数组本身就有类型,Struts2使用元素类型对应类型转换器,将字符串转换为数组元素的类型,然后再设置到新的数组中

    7:collection

    如果不能确定对象类型,则假定集合元素类型为String,并创建一个新的ArrayList存放所有的字符串。

    创建自定义类型转换器

    如果struts的内置类型转换器无法满足你的要求,你还可以自定义类型转换器!你需要实现ognlTypeConver接口,但由于该接口中的convertValue()太过复杂,所以你可以选择继承defaultTypeConvert类,

    如下所示:

    public Object convertValue(Map Context,Object value,Class type)

    参数context是表示ognl上下文中Map的对象,value是需要转换的对象,toType是需要转换的目标类型!

    例:

    public numberConvert extends defaultTypeConvert
    
    {
    
       @Override
    
       public Object convertValue(Map context,Object value,Class type)
    
       {
    
            //将字符串转换为long类型
    
            if(Type==long.class){
    
             String strNum=((String[])value)[0];
    
             StringBuffer sb=new StringBuffer(strNum);
    
           //查找字符串中代表千分位的,
    
            int index=sb.indexOf(",");
    
           //采用循环将字符串中的,一一删除
    
           while(index>-1){
    
               sb.deleteCharAt(index);
    
               index=sb.indexOf(",");
    
            }
    
            return Long.parseLong(sb.toString())
    
             }
    
           else if(toType==String.class)
    
           {
    
               Long num=(Long)num;
    
               StringBuffer sb=new StringBuffer(num.toString());
    
               StringBuffer result=new StringBuffer();
    
               //先将sb对象中的字符反序,以便于插入表示千分位的,
    
               sb=sb.reverse();
    
               String temp=null;
    
               while(sb.lengh()>3)
    
              {
    
               temp=sb.subString(0,3);
    
               result.append(temp);
    
               result.append(",");
    
              sb.delete(0,3);
    
              result.append(sb);
              }
                 return result.reverse().toString();
    
           }
    
          return null;
    
       }
    
    }

    1:web程序中的类型转换是双向的,从客户端接收到的数据需要进行类型转换,再将数据输出到客户端时也要进行类型转换!在本例中,客户端输入字符串“45,123,234” 利用我们自定义的类型转换器

    可以将它转换成Long类型的45123234,如果要向客户端输入Long型的数据,那么该转换器将再次调用,将45123234转换成“45,123,234”。类型之间的双向转换都是在convertValue()方法中产生的

    通过判断参数type类型,可以得知转换的方向

    2:我们将value转换为string数组,为什么value是String数组而不是String呢?Struts2在获取请求参数的时候调用的是HttpServletRequest对象的getParameterMap方法,它返回一个Map对象,

    请求参数的名字为key,请求参数的值为value,key的类型是String,而value是String类型的数组,Struts2根据Map中的key将value设置到对象的属性上。如果需要类型转换,则Struts2,将String类型的数组传给convertValue()方法的value参数!

         编写类型转换器时,除了可以继承OGNL中的DefaultTypeConvert类外,还可以继承Struts2中给出的org.apache.struts2.util.StrutsTypeConvert抽象类。StrtsTypeConvert抽象类继承自DefalutTypeConvert类,提供两个方法供String与其他类型转换!

         

    public abstract Object convertFromString(Map context,String[] value,Class type);

    public abstract String convertToString(Map context,Object o);
  • 相关阅读:
    JavaScript打开新窗口被拦截问题
    FileReader读取本地文件
    JS实现数组去重的6种方法总结
    cssReset
    鼠标拖拽定位和DOM各种尺寸详解
    关于前端本地压缩图片,兼容IOS/Android/PC且自动按需加载文件之lrz.bundle.js
    AJAX的get和post请求原生编写方法
    Grunt的配置和使用
    浏览器的工作流程
    Python基础——函数的迭代器和生成器
  • 原文地址:https://www.cnblogs.com/chimingyang/p/5960502.html
Copyright © 2020-2023  润新知