1. 为什么需要数据类型转换?
所有的MVC框架都是表现层的解决方案。而表现层主要用来和用户进行交互,负责收集用户的输入和展示服务器的数据
状态。这样数据就有两个流动方向,从服务器流出和进入服务器,而网络传输是以字符的形式进行的。前者不存在数据类
型转换的问题,因为所有的Java数据类型都可以很好的转换成字符串;而后者就存在这个问题,需要将字符串形式的请求
参数转换成各种各样的Java类型。这个功能应该由MVC框架提供。
2. struts2的数据类型转换
struts2的数据类型转换是建立在OGNL基础之上的。struts2框架提供了内置的数据类型转换器,可以完成字符串和一些
简单数据类型,数组和集合类型之间的数据类型转换。struts2也提供了一个拦截器负责处理类型转换时的错误。
3. 如果没有MVC框架提供的数据类型转换,如何手工完成
强制类型转换
4. struts2的数据类型转换器实现
struts2的类型转换器都要实现OGNL的TypeConverter接口里的convertValue方法,但是该法较为复杂,所以OGNL
提供了也它的默认实现类DefaultTypeConvertor。struts2提供了更友好,更直观的实现类StrutsTypeConvertor。
DefaultTypeConvertor
public Object convertValue(Map context, Object value, Class toType)
toType 通过它可以判断类型转换的方向
value 带转换的值,随toType的不同而不同
StrutsTypeConvertor
public Object convertFromString(Map arg0, String[] arg1, Class arg2)
public String convertToString(Map arg0, Object arg1)
5. struts2的类型转换器的注册
局部类型转换器 只对某个Action的某个属性起作用
全局类型转换器 多所有的Action特定类型的属性起作用
局部类型转换器:
命名方式:ActionName-conversion.properties
和ActionName指定的Action放在一起
内容: 属性名=类型转换器的全限定类名
全局类型转换器:
命名方式是固定的:xwork-conversion.properties
和struts.xml放在一起
内容:需要转换的类型的全限定类名=转换器的全限定类名
6. 使用OGNL实现struts2的类型转换器
<s:textfield name="user.name" label="UserName"/>
7. 使用数组或者集合类型封装请求参数时的类型转换的实现
8. 如果集合类型不使用泛型,struts2怎样处理数据类型转换
9. struts2的内置类型转换器
10 .类型转换时的异常处理
由conversionError拦截器拦截,将错误信息封装成fielderror,并且放在ActionContext中,转向input逻辑视图。
需要输出错误信息使用<s:fielderror/>.
11. 表现层数据处理的两个方面:数据校验和类型转换以及二者之间的关系