笔记:Struts2 Action 非泛型集合元素类型转换
- 局部类型转换文件
- 局部类型转换文件的文件名应为 ActionName-conversion.properties,其中 ActionName 是需要替换为 Action 的类名称,后面的 conversion.properties 字符串则是固定部分,类型转换文件应该放在和Action类文件相同的位置。
- 为了指定非泛型集合元素的数据类型,需要指定二个部分:集合属性的名称、集合元素类型,在局部类型转换文件中指定如下key-value对即可:
- List 类型:
- Element_PropName=ElementType,PropName 表示 action 的属性名称,ElementType 表示完整的集合元素类型
- Map类型:
- Key_PropName=KeyType,PropName 表示 action 的属性名称,KeyType 表示完整的Key数据类型
- Element_PropName=ValueType,PropName 表示 action 的属性名称,ValueType 表示完整的Value元素类型
- 注册局部类型转换器,需要在局部类型转换文件中如下增加:
PropName=自定义TypeConverter
- 全局类型转换器
- 全局类型转换器不是对指定Action的指定属性起作用,而是对指定类型起作用,注册全局类型转换起应该提供一个 xwork-conversion.properties 文件,该文件直接放在Web应用的WEB-INF/classes 路径下即可
- 文件内容由多项 PropType=ConvertClass 项组成,PropType 表示类型;ConvertClass 表示自定义类型转换器
- 自定义类型转换器
- 自定义类型转换器,必须实现 TypeConverter 接口,由于接口方法太过与复杂,所以提供了一个实现类 DefaultTypeConverter ,通常都采用扩展该类来实现自定义类型转换器,重写类的 convertValue 方法,方法声明如下:
public Object convertValue(Map context,Object value,Class toType)
context :类型转换环境的上下文
value:是需要转换的参数,随着转换方向的不同,value参数值也是不一样,表示的是源类型
toType:是转换后的目标类型
也可以扩展 StrutsTypeConverter类,该类简化了类型转换器的实现,需要把字符串转换为复合类型则重写 convertFromString 抽象方法;需要把复合类型转换为字符串则重写 convertToString 抽象方法
- 类型转换错误处理
- Status 2 提供了一个名称为 ConversionError 的拦截器,这个拦截器被注册在默认的拦截器栈中,参考默认配置文件 struts-default.xml
- 如果Status 2 的类型转换器执行类型转换错误,拦截器将错误封装成表单域错误(FieldError),并将这些错误信息放入 ActionContext中,然后会跳转到名为 input 的逻辑视图
- 默认的提示错误为 invalid field value for field xxxx ,如果需要增加国际化的错误提示,则在全局资源文件中增加以下配置代码:
xwork.default.invalid.fieldvalue={0}字段类型转换失败!
- 需要设置特定字段指定特别的提示信息,可以配置Action的局部资源文件来实现,配置代码如下:
invalid.fieldvalue.propName=tipMsg
其中 invalid.fieldvalue 为固定字符串,propName 为字段的名称,tipMsg 为具体的提示文本
笔记:Struts2 Action 非泛型集合元素类型转换的更多相关文章
- 浅谈:C#中的非泛型集合
1.首先:ArrayList:非泛型集合 List:泛型集合 集合跟数组比较我们更容易理解.数组:1,长度固定2,数据类型预先声明 集合:1,长度可变2,数据类型预先声明的为泛型集合,数据类型不限定为 ...
- C#非泛型集合和泛型集合的超级详解
C# 泛型集合之非泛型集合类与泛型集合类的对应: ArrayList对应List HashTable对应Dictionary Queue对应Queue Stack对应Stack SortedList对 ...
- LINQ学习系列-----3.1 查询非泛型集合
一.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继承了IEnumera ...
- C#-非泛型集合的方法
非泛型集合的类和接口位于System.Collections命名空间 如:列表.队列.位数组.哈希表和字典的集合 ArrayList 动态数组 可被单独索引的对象的有序集合可以使用索引在指定的 ...
- C#非泛型集合和泛型集合
第一 : ArrayList(非泛型集合) 与List(泛型集合) ArrayList 是数组的复杂版本.ArrayList 类提供在大多数 Collections 类中提供但不在 Array(数 ...
- LINQ学习系列-----3.1 查询非泛型集合和多个分组
一.查询非泛型集合 1.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继 ...
- Linq操作非泛型集合
我们都知道,Linq能查询泛型集合,确切的说是:LINQ能实现查询泛型对象或者实现了IEnumerable.但是,很遗憾的是诸如ArrayList这样的非泛型集合并没有实现IEnumerable.那咋 ...
- Linq查询非泛型集合要指定Student类型(比如List)
#region Linq to 集合查询非泛型集合要指定Student类型 //ArrayList list = new ArrayList(); //li ...
- 编写高质量代码改善C#程序的157个建议——建议20:使用泛型集合代替非泛型集合
建议20:使用泛型集合代替非泛型集合 在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型.很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看Array ...
随机推荐
- 转:彻底搞清referrer和origin
在http协议中有这两个字段,之前一直隐隐约约的觉得是,一种标记请求来源的方法(的确是),但是更细致的对这两个字段的比较却没有一个清楚的认识. referrer 到底是referer还是referre ...
- python 循环语句 函数 模块
python循环语句 while循环语法结构 当需要语句不断的重复执行时,可以使用while循环 while expression: while_suite 语句ehile_suite会被连续不断的循 ...
- Linux(二)命令
Linux命令一.命令基本格式 命令行头部显示字符意义 [root@localhost ~] # root 用户名 localhost 主机名 ~ 当前目录 ~表示home目录 # 用户权限,#表示超 ...
- NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...
- 3.3 与Cache相关的PCI总线事务
PCI总线规范定义了一系列与Cache相关的总线事务,以提高PCI设备与主存储器进行数据交换的效率,即DMA读写的效率.当PCI设备使用DMA方式向存储器进行读写操作时,一定需要经过HOST主桥,而H ...
- iframe父页面获取子页面的参数
1.父页面中的iframe <iframe name="parentPage"></iframe> 2.子页面中元素的属性 <input type=& ...
- hi3531调用sil9024的驱动
//测试mao printf("\n\n"); unsigned int cmd=1; unsigned long arg =4; fd = open(" ...
- Caused by: java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery
1.错误描述 2014-7-12 21:06:37 org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreat ...
- Codeforces Round #425 (Div. 2) D.Misha, Grisha and Underground
我奇特的脑回路的做法就是 树链剖分 + 树状数组 树状数组是那种 区间修改,区间求和,还有回溯的 当我看到别人写的是lca,直接讨论时,感觉自己的智商收到了碾压... #include<cmat ...
- windows下安装MongoDB进度条不动
windows 下安装MongoDB, 在 Installing MongoDB Compass...(this may take a few minutes) 一步,会停留很长时间,点击取消可能也会 ...