struts2-类型转换
1、类型转换:
--从HTML表单到一个Action对象,类型转换时从字符串到非字符串;
--struts2中,把请求参数映射到action属性的工作由Parameters拦截器负责,它是默认的defaultStack拦截器栈中的一员,Parameters拦截器可以自动完成字符串和基本数据类型之间的转换;
--类型转换失败时:
> 若Action对象没有实现ValidationAware接口,则继续调用Action方法;
> 若实现了ValidationAware接口,则不会调用Action方法,而是交由action中name属性为input的result处理;若不存在name=”input”的result,则抛出异常;
--ConversionError拦截器负责添加与类型转换有关的出错消息和保存哥请求参数的原始值(前提是Action类实现了ValidationAware接口);
--覆盖错误消息:
> 在Action类所在包中新建ActionClassName.properties文件;
> 在属性文件中添加键值对:invalid.fieldvalue.fieldName=xxx
--若发生类型转换错误,可以在ValueStack栈顶元素获取到实现了ValidationAware接口的Action对象的中读取fieldErrors属性来获取错误信息;
2、自定义类型转换器:自定义类型转换器必须实现ognl.TypeConverter接口或对这个接口的某种实现类进行扩展:
--由于struts2不能自动完成从字符串到引用类型的转换,所有需要自定义类型转换器;
--步骤:
> 1. 扩展StrutsTypeConverter类;
> 2. 配置类型转换器:
①基于字段:
1)在字段所在Model的包下,创建ModelClassName-converter.properties文件
2)添加键值对: fieldName = 类型转换器的全类名
3)首次使用该转换器时创建实例。
②基于类型:
1)在src下创建xwork-conversion.properties;
2)添加键值对: 待转换的类型 = 类型转换器全类名;
3)在struts2加载时创建实例;
16、复杂类型转换:
--struts2表单标签的name值可以被赋为属性(复杂类型)的属性,如name=employee.name
--全局的类型转换器仍能够正常的工作;