1.Overview
类型转化在struts2中的主要作用是把页面上符合ognl定义的控件的名字的输入值映射到action的相应字段中.以删除在servlet时代需要经常做的request.getParameter操作,并且利用ognl表达式甚至可以直接把页面上字段的值直接注入到action声明的对象中,是这个过程能够自动化,使得代码更加的简洁,更OO,可以说hibernate是处理对象到数据库的双向转化,struts2就是处理对象到html页面的双向转化.
2.Working Sample
该接口中还有个performFallbackConversion 方法,用来实现转化失败后的一些必要的操作.
当转化出现错误的时候需要抛出 XWorkException或者TypeConversionException以便struts2可以捕获该异常.
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()方法中.
5.Creating a Type Converter
继承StrutsTypeConverter类,实现to,from双向转化操作并且通过ActionClassName-conversion.properties或者全局xwork-conversion.properties中加载改converter即可.
6.Advanced Type Conversion(高级类型转化)
7.Collection and Map Support
foo.java
在文件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来研习.
8.Type Conversion Error Handling
类型转化在struts2中的主要作用是把页面上符合ognl定义的控件的名字的输入值映射到action的相应字段中.以删除在servlet时代需要经常做的request.getParameter操作,并且利用ognl表达式甚至可以直接把页面上字段的值直接注入到action声明的对象中,是这个过程能够自动化,使得代码更加的简洁,更OO,可以说hibernate是处理对象到数据库的双向转化,struts2就是处理对象到html页面的双向转化.
2.Working Sample
- Action以及字段级别的类型转化 在action对应的目录下定义ActionClassName-conversion.properties
- 全局以及类级别的类型转化 xwork-conversion.properties在classpath
- PointConverter必须实现TypeConverter或者直接继承StrutsTypeConverter类. 并且实现如下的双向转化
point = com.acme.PointConverter
com.acme.Point = com.acme.PointConverter
public abstract Object convertFromString(Map context, String[] values, Class toClass);
public abstract String convertToString(Map context, Object o);
该接口中还有个performFallbackConversion 方法,用来实现转化失败后的一些必要的操作.
当转化出现错误的时候需要抛出 XWorkException或者TypeConversionException以便struts2可以捕获该异常.
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或者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的元素.
8.Type Conversion Error Handling
- 类型转化错误提供了一种方式以区分用户输入错误和,输入类型转化错误.
- 所有的类型转化错误的提示信息的格式可以通过重写xwork.default.invalid.fieldvalue来修改.
- 也可以修改通过在Action.properties定义invalid.fieldvalue.xxx(xxx是字段名)来修改所需要显示的类型转化错误的信息.
- 显示该错误信息的途径有 Globally, using the Conversion Error Interceptor
在validator文件中定义conversion validator来显示.
发表评论
- 浏览: 6272 次
- 性别:

- 来自: 福建福州

- 详细资料
搜索本博客
最新评论
-
struts2实践- 结合jquery ...
不晓得有没有完整的代码,我现在弄的一头雾水的,不知道jquery的验证能不能与s ...
-- by long_jianxiu -
struts2实践- 结合jquery ...
jquery-validate的rules和messages分开写,如能合在一起 ...
-- by stworthy -
struts2实践- 结合jquery ...
看着不错, 本来就很烦struts的validator
-- by spiritfrog -
struts2实践- 结合jquery ...
是啊,现实开发中,总是很难直接套用strut2自带的那几个模板来实现验证,而且不 ...
-- by zl5897 -
struts2实践- 结合jquery ...
支持你的观点,感觉还是jquery表现力好点
-- by wangyazhen






评论排行榜