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);

struts之类型转换的更多相关文章

  1. Struts的类型转换

    struts中jsp提交的数据,struts会自动转换为action中的属性类型: 对于基本的数据类型以及日期类型会自动转换: 就像前面那一篇博客的代码封装一样,会把字符串类型传过来的数据转化为相应的 ...

  2. Struts中类型转换踩的坑

    出现的异常: 当我输入的数据很大时候,转换后如上,这并不是我想要的, 出现问题的原因: Struts2对常用的数据类型如String.Integer.Double等都添加了转换器进行对应的转换操作. ...

  3. Struts个人总结

    编写Struts2第一个程序 Struts2是目前最流行的MVC框架,吸收了传统Struts和WebWork两者的精华,基于Struts2来进行开发可以大大减少开发时间,提高开发效率,并降低后期维护时 ...

  4. java学习笔记 (2) —— Struts2类型转换、数据验证重要知识点

    1.*Action.conversion-properties 如(point=com.test.Converter.PointListConverter) 具体操作类的配置文件 2.*Action. ...

  5. struts2框架之类型转换(参考第二天学习笔记)

    类型转换 1. 什么是类型转换 刚才学习了封装请求参数,把表单数据封装到Action(模型)的属性中.表单中的数据都是String类型,但Action(模型)的属性不一定什么类型. 将来我们还需要数据 ...

  6. struts2随笔

    1.struts.properties配置常量等同于struts.xml中配置(置于类加载路径下面)struts.multipart.maxSize文件上传最大大小struts.action.exte ...

  7. Struts1使用技巧

    转自:https://blog.csdn.net/chjttony/article/details/6099101 1.Struts1是Apache推出的java web开发领域一个比较早,同时也是使 ...

  8. struts2学习之基础笔记3

    第8章Struts 2类型转换 使用类型转换器 自定义类型转换器 步骤:1. Struts 2 构建流程 2.自定义类型转换器类(继承 DefaultTypeConverter /StrutsType ...

  9. struts基于ognl的自动类型转换需要注意的地方

    好吧,坎坷的过程我就不说了,直接上结论: 在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法. 例如: 客户端表单: <s:form ac ...

随机推荐

  1. 【Java每日一题】20161219

    package Dec2016; import java.util.Arrays; public class Ques1219 { public static void main(String[] a ...

  2. 转载:《TypeScript 中文入门教程》 14、输入.d.ts文件

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 当使用外部JavaScript库或新的宿主API时,你需要一个声明文件(.d.t ...

  3. 如何在MFC界面开发中响应Button按钮的Down和Up事件

    通过尝试有两种方案可以解决这个问题,第一种方案是通过PreTranslateMessage函数在调度消息之前对消息类型进行筛选,第二种方案是重载CButton类,在重载后的类CForTestButto ...

  4. Lind.DDD.Utils.HttpHelper里静态对象引出的Http超时问题

    回到目录 Lind.DDD.Utils.HttpHelper组件主要实现了对HTTP的各种操作,如Get,Post,Put和Delete,它属于最纯粹的操作,大叔把它封装的目的主要为了实现与API安全 ...

  5. PHP中的特殊类,接口类和抽象类(都不能直接实例化)

    接口类不用实例化,需要一一实现接口定义的所有方法.关键字interface implements 接口interface 是一个规定,给人继承用的东西,有点像抽象类在里面定义的方法,却不去实例化,而需 ...

  6. [JS]笔记15之客户端存储cookie

    -->本地存储发展情况 -->什么是cookie -->cookie优缺点 -->cookie的设置.读取.删除 -->cookie应用 本地存储发展情况 一.什么是co ...

  7. CSS3中的弹性布局——"em"的用法

    使用CSS也好久了,但一直都是在使用“px”来设置Web元素的相关属性,未敢使用“em”.主要原因是,对其并不什么了解,只知道一点概念性的东西,前段时间在项目中要求使用“em”作为单位设置元素,所以从 ...

  8. UITextFieldDelegate协议

    很多人都认为UITextField很简单,为什么会写这个协议呢? 因为在实际开发中可能会用到: 比如要做到下图的效果: 文本框下面的下划线的颜色要随着输入的状态变化: 点击对应的文本框,其下面的线条变 ...

  9. sharepoint 相关<httpHandlers>

    <add verb="GET,POST,HEAD,(GETSOURCE),(HEADSOURCE),(POSTSOURCE)" path="*.doc,*.docx ...

  10. IOS开发基础知识--碎片22

    1:设置有间距的表格行(UITableViewStyleGrouped) .设置section的数目,即是你有多少个cell - (NSInteger)numberOfSectionsInTableV ...