1.Overview
类型转化在struts2中的主要作用是把页面上符合ognl定义的控件的名字的输入值映射到action的相应字段中.以删除在servlet时代需要经常做的request.getParameter操作,并且利用ognl表达式甚至可以直接把页面上字段的值直接注入到action声明的对象中,是这个过程能够自动化,使得代码更加的简洁,更OO,可以说hibernate是处理对象到数据库的双向转化,struts2就是处理对象到html页面的双向转化.
2.Working Sample
[list]
Action以及字段级别的类型转化
在action对应的目录下定义ActionClassName-conversion.properties
point = com.acme.PointConverter
全局以及类级别的类型转化
xwork-conversion.properties在classpath
com.acme.Point = com.acme.PointConverter
PointConverter必须实现TypeConverter或者直接继承StrutsTypeConverter类.
并且实现如下的双向转化
public abstract Object convertFromString(Map context, String[] values, Class toClass);
public abstract String convertToString(Map context, Object o);
该接口中还有个performFallbackConversion 方法,用来实现转化失败后的一些必要的操作.
当转化出现错误的时候需要抛出 XWorkException或者TypeConversionException以便struts2可以捕获该异常.
[/list]
3.Built in Type Conversion Support(内建的转化)
String
boolean / Boolean
char / Character
int / Integer, float / Float, long / Long, double / Double
dates
arrays 数组数据可以单个转化数据
collections 如果不能确定collection中的元素的类型,默认传见一个String的ArrayList.
4.Relationship to Parameter Names
类型转化的最佳利用方式是直接在页面上定义user.name这样就能把input的数据直接注入到action.getUser().setName()方法中.
- Use complex OGNL expressions--struts2能够自动处理对象的创建,而不用手工的创建嵌套对象.
- Ognl语法支持创建带有不带参数构造函数的对象.
- user.name会调用getUser().setName()但是如果user为空,那么action还必须具有setUser方法.
- For lists and maps, use index notation, such as people[0].name or friends['patrick'].name.
- 对于多选框,如果定义问people.name 则系统会自动传见多个person对象并且注入name属性.
5.Creating a Type Converter
继承StrutsTypeConverter类,实现to,from双向转化操作并且通过ActionClassName-conversion.properties或者全局xwork-conversion.properties中加载改converter即可.
6.Advanced Type Conversion(高级类型转化)
- Null Property Handling(空指针处理)--自动对象嵌套关系创建.
实现规则
当ognl抛出空指针异常后,struts2能捕获该异常,并且自动创建相应的对象.
如果属性被声明为Collection or List,创建ArrayList并注入.
如果声明为Map,创建HashMap并且注入.
如果是javabean并且具有无参数构造函数,系统会利用ObjectFactory.buildBean方法创建该对象.
流程如下
person.name-->setUsers()-->getUsers().setName()
7.Collection and Map Support
[list]
系统支持在定义list或者collection中的对象类型.通过在Class-conversion.properties
定义Element_xxx=Class(xxx表示action中对应的字段名),美来定义action中的对象类型.
可以通过annotation来支持上面的Element_xxx定义.
定义集合索引方式.
在配置文件中定义KeyProperty_xxx=yyy xxx是集合字段的名字,yyy集合中类的某个需要当作索引的属性.下列举例
MyAction.java
/**
* @return a Collection of Foo objects
*/
public Collection getFooCollection()
{
return foo;
}
foo.java
/**
* @return a unique identifier
*/
public Long getId()
{
return id;
}
在文件MyAction-conversion.properties中定义
KeyProperty_fooCollection=id
fooCollection(22)将代表fooCollection中id为22,foo对象.
通过fooCollection(22).name可以直接设置该对象的其他属性的值.
fooCollection(22)如果返回空值,不会自动创建该对象,可以通过fooCollection.makeNew[0]=Phil直接创建该对象,如果该写法用于Set那么必须定义foo对象的equal和hashCode并且包含id之外的字段,以防止Set删除id字段为null的元素.
类型转化着部分处理的代码感觉和ognl结合的比较紧密,需要结合ognl来研习.
[/list]
8.Type Conversion Error Handling
- 类型转化错误提供了一种方式以区分用户输入错误和,输入类型转化错误.
- 所有的类型转化错误的提示信息的格式可以通过重写xwork.default.invalid.fieldvalue来修改.
- 也可以修改通过在Action.properties定义invalid.fieldvalue.xxx(xxx是字段名)来修改所需要显示的类型转化错误的信息.
- 显示该错误信息的途径有
Globally, using the Conversion Error Interceptor
在validator文件中定义conversion validator来显示.
分享到:
相关推荐
标题《qgroundcontrol-developers-guide-en》表明本篇指南是关于qgroundcontrol(简称QGC)的开发者使用说明,QGC是地面站控制软件,其主要功能是为PX4飞控系统进行配置。 描述中提到,这份开发者指南解释了QGC软件...
《ARM System Developers Guide - Designing and Optimizing System Software》是一本深入探讨ARM处理器系统软件设计与优化的专业书籍,由Andrew N. Sloss、Dominic Symes、Chris Wright和John Rayfield四位在ARM...
《Oracle Database 应用开发者指南:基础篇 10g Release 2(10.2)》是一份详尽的文档,旨在为那些希望利用Oracle数据库进行应用开发的专业人士提供全面的技术指导。此文档由Oracle公司发布,版本号为B14251-01,...
SIP2开发者指南 3M Standard Interchange Protocol V2.00 3M™ SelfCheck™ system SIP2 Interface Developer’s Guide
这个是ERSI官方文档,绝对权威,绝对经典。AO开发必读。
2. **脚本语言与编程**:ACT主要基于Python语言进行开发,因此熟悉Python语法是必要的。指南会介绍如何使用Python编写ACT脚本,实现对Workbench模型的操作和定制化功能。 3. **ACT组件开发**:学习如何创建自定义的...
Developers guide to ASP.NET
这个是ERSI官方文档,绝对权威,绝对经典。AO开发必读。
本指南将围绕“VxWorks Device Driver Developers Guide Vol”展开,深入解析驱动编程的核心概念和技术。 首先,VxWorks设备驱动的开发主要涉及三个卷: 1. **Vol1_6.6**: 这部分通常涵盖驱动程序的基础知识,包括...
标题:“Apache_CloudStack-4.3.0-Developers_Guide-en-US” 指明了文件的名称,这是一个针对开发者指南的文档,专为Apache CloudStack 4.3.0版本编写。 描述:“Apache_CloudStack-4.3.0-Developers_Guide-en-US....
Tosi -- Matplotlib for Python Developers -- 2009 -- code.7z
Nandi -- Spark for Python Developers -- 2015 -- code.7z
2-day-developers-guide.pdf
1. 文档标题为“json-developers-guide.pdf”,并特别指出是“oracle 19c json开发指南”。这说明文档是针对Oracle数据库19c版本下使用JSON数据格式进行开发的官方指南。Oracle 19c是一个企业级数据库版本,其对JSON...
该压缩包包含的文件“win95-a-developers-guide”很可能是本书的电子版,可能包括PDF文档、源代码示例或其他相关资源。 Windows 95是微软发布的一款具有里程碑意义的操作系统,它引入了全新的图形用户界面和多任务...
名称:daily.dev Where developers gro ---------------------------------------- 版本:3.28.2 作者:https://daily.dev/ 分类:开发者工具 ---------------------------------------- 概述:获取为您量身定制的最...
Struts、Spring和Hibernate是Java Web开发中的三大框架,它们的整合使用,通常被称为SSH(Struts2、Spring4、Hibernate5)框架集成。SSH整合能够实现MVC设计模式,提供松耦合、高可扩展性的应用解决方案。下面将详细...
MediaTek LinkIt Smart 7688 Developers Guide v_0.92-1 是一份针对MediaTek LinkIt Smart 7688开发平台的技术指南,适用于那些希望深入了解该平台并进行开发的工程师或爱好者。这份文档是英文版,为那些喜欢阅读...
·增加的多核处理器支持,包括Intel@ Core i7处理器、ARM MPCore and Cortex A9处理器、FreescaleQorIQ P2020处理器、Cavium 54xx/55xx/56xx/57xx/58xx系列处理器和RMI XLR/XLS系列处理器等,使客户能够根据他们...
《Kotlin for Android Developers》中文版是一本专为Android开发者准备的Kotlin编程语言指南。这本书深入浅出地介绍了Kotlin这一现代、简洁且强大的编程语言,旨在帮助开发者快速掌握Kotlin并将其应用到Android应用...