1. 局部类型转换文件
    1. 局部类型转换文件的文件名应为 ActionName-conversion.properties,其中 ActionName 是需要替换为 Action 的类名称,后面的 conversion.properties 字符串则是固定部分,类型转换文件应该放在和Action类文件相同的位置。
    2. 为了指定非泛型集合元素的数据类型,需要指定二个部分:集合属性的名称、集合元素类型,在局部类型转换文件中指定如下key-value对即可:
      1. List 类型:
        1. Element_PropName=ElementType,PropName 表示 action 的属性名称,ElementType 表示完整的集合元素类型
      2. Map类型:
        1. Key_PropName=KeyType,PropName 表示 action 的属性名称,KeyType 表示完整的Key数据类型
        2. Element_PropName=ValueType,PropName 表示 action 的属性名称,ValueType 表示完整的Value元素类型
    3. 注册局部类型转换器,需要在局部类型转换文件中如下增加:

      PropName=自定义TypeConverter

  2. 全局类型转换器
    1. 全局类型转换器不是对指定Action的指定属性起作用,而是对指定类型起作用,注册全局类型转换起应该提供一个 xwork-conversion.properties 文件,该文件直接放在Web应用的WEB-INF/classes 路径下即可
    2. 文件内容由多项 PropType=ConvertClass 项组成,PropType 表示类型;ConvertClass 表示自定义类型转换器
  3. 自定义类型转换器
    1. 自定义类型转换器,必须实现 TypeConverter 接口,由于接口方法太过与复杂,所以提供了一个实现类 DefaultTypeConverter ,通常都采用扩展该类来实现自定义类型转换器,重写类的 convertValue 方法,方法声明如下:

      public Object convertValue(Map context,Object value,Class toType)

      context :类型转换环境的上下文

      value:是需要转换的参数,随着转换方向的不同,value参数值也是不一样,表示的是源类型

      toType:是转换后的目标类型

      也可以扩展 StrutsTypeConverter类,该类简化了类型转换器的实现,需要把字符串转换为复合类型则重写 convertFromString 抽象方法;需要把复合类型转换为字符串则重写 convertToString 抽象方法

  4. 类型转换错误处理
    1. Status 2 提供了一个名称为 ConversionError 的拦截器,这个拦截器被注册在默认的拦截器栈中,参考默认配置文件 struts-default.xml
    2. 如果Status 2 的类型转换器执行类型转换错误,拦截器将错误封装成表单域错误(FieldError),并将这些错误信息放入 ActionContext中,然后会跳转到名为 input 的逻辑视图
    3. 默认的提示错误为 invalid field value for field xxxx ,如果需要增加国际化的错误提示,则在全局资源文件中增加以下配置代码:

      xwork.default.invalid.fieldvalue={0}字段类型转换失败!

    4. 需要设置特定字段指定特别的提示信息,可以配置Action的局部资源文件来实现,配置代码如下:

      invalid.fieldvalue.propName=tipMsg

      其中 invalid.fieldvalue 为固定字符串,propName 为字段的名称,tipMsg 为具体的提示文本

       
       

       
       

 
 

笔记:Struts2 Action 非泛型集合元素类型转换的更多相关文章

  1. 浅谈:C#中的非泛型集合

    1.首先:ArrayList:非泛型集合 List:泛型集合 集合跟数组比较我们更容易理解.数组:1,长度固定2,数据类型预先声明 集合:1,长度可变2,数据类型预先声明的为泛型集合,数据类型不限定为 ...

  2. C#非泛型集合和泛型集合的超级详解

    C# 泛型集合之非泛型集合类与泛型集合类的对应: ArrayList对应List HashTable对应Dictionary Queue对应Queue Stack对应Stack SortedList对 ...

  3. LINQ学习系列-----3.1 查询非泛型集合

    一.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继承了IEnumera ...

  4. C#-非泛型集合的方法

    非泛型集合的类和接口位于System.Collections命名空间 如:列表.队列.位数组.哈希表和字典的集合     ArrayList 动态数组 可被单独索引的对象的有序集合可以使用索引在指定的 ...

  5. C#非泛型集合和泛型集合

    第一  : ArrayList(非泛型集合)  与List(泛型集合) ArrayList 是数组的复杂版本.ArrayList 类提供在大多数 Collections 类中提供但不在 Array(数 ...

  6. LINQ学习系列-----3.1 查询非泛型集合和多个分组

    一.查询非泛型集合 1.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继 ...

  7. Linq操作非泛型集合

    我们都知道,Linq能查询泛型集合,确切的说是:LINQ能实现查询泛型对象或者实现了IEnumerable.但是,很遗憾的是诸如ArrayList这样的非泛型集合并没有实现IEnumerable.那咋 ...

  8. Linq查询非泛型集合要指定Student类型(比如List)

    #region Linq to 集合查询非泛型集合要指定Student类型            //ArrayList list = new ArrayList();            //li ...

  9. 编写高质量代码改善C#程序的157个建议——建议20:使用泛型集合代替非泛型集合

    建议20:使用泛型集合代替非泛型集合 在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型.很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看Array ...

随机推荐

  1. SQL语句学习

    看似简单,但其实包含很多技巧思维 1.查询课程表中所有科目大于80的学生 select distinct name from student where name not in (select nam ...

  2. Wireshark理解TCP乱序重组和HTTP解析渲染

    TCP数据传输过程 TCP乱序重组原理 HTTP解析渲染 TCP乱序重组 TCP具有乱序重组的功能.(1)TCP具有缓冲区(2)TCP报文具有序列号所以,对于你说的问题,一种常见的处理方式是:TCP会 ...

  3. 【Unity3D】Unity3D开发《我的世界》之七、番外篇

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_07.html 本来上一篇就结束了,但是有小伙伴私信我觉得还差了很多重要的内容,比如 ...

  4. 关于编译FFMPEG的初级教程

    首先我们要下载相关工具,这里不多说,大家按照我的地址去下载文件就好了 MINGW下载地址:http://prdownloads.sourceforge.net/mingw/MinGW-3.1.0-1. ...

  5. Vxworks驱动程序的结构

    驱动程序的结构包括三个部分:初始化部分,函数功能部分和中断服务程序ISR.初始化部分初始化硬件,分配设备所需的资源,完成所有与系统相关的设置.如果是字符设备,首先调用iosDrvlnstall()来安 ...

  6. jquery-1.11.1.js

       每次想要使用这个js时,总是要到官网上下载,太麻烦,现在把它收录了 jquery-1.11.1.js /*! * jQuery JavaScript Library v1.11.1 * http ...

  7. Flex内存泄露解决方法和内存释放优化原则

    Flex内存泄露解决方法和内存释放优化原则 你对Flex内存泄露的概念是否了解,这里和大家分享一下Flex内存释放优化原则和Flex内存泄露解决方法,希望本文的介绍能让你有所收获. Flex内存释放优 ...

  8. Android APP开发入门教程-Button

    代码编写 做好准备工作后,终于可以开始写我们的hello android了,在开始编写代码之前,我们先了解几个文件: res/layout/main.xml App主窗体布局文件,你的应用长什么样都在 ...

  9. TypeError: Error #1009: 无法访问空对象引用的属性或方法

    1.错误描述 TypeError: Error #1009: 无法访问空对象引用的属性或方法. at FirstMap/search_clickHandler()[E:\Flash Builder\M ...

  10. I Hate It HDU - 1754

    很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...