1.类型转换概述
- 从一个HTML表单到一个Action对象,类型转换是从字符串到非字符串
- 在struts2中,由Parameters拦截器自动完成字符串和基本数据类型之间的转换
2.类型转换出错处理
- 如果类型转换出错:
- 未实现validationAware接口:struts在遇到类型转换错误时仍会调用action,仿佛什么都没有发生
- 实现了validationAware接口:struts将检查相关元素的声明是否包含着一个name=input的result,如果有则将控制器交给该result元素,若没有则抛出一个异常
- 疑问;
- 如何覆盖默认的消息提示:
- 如果主题是simple,会不会自动显示错误消息,不会又需要怎么办:
- 类型转换错误消息定制:
- ConversionError拦截器负责添加与类型转换有关的出错消息(前提是Action类必须实现了validationAware接口)和保存各请求参数的原始值
- 若字段标签使用的不是simple主题,则非法输入字段将导致一条有着以下格式的出错消息: Invalid field value for field "filedName".
- 覆盖默认的错误消息:
- 在对应Action类所在包中新建ActionClassName.properties文件,ClassName即为包含着输入字段的Action类的类名
- 再属性文件中添加如下键值对:invalid.fieldvalue.fieldName=Custom error message
- 定制出错消息的样式:
- 每一条出错消息都被打包在一个HTML span元素里,可以通过覆盖其行标为errorMessage的那个css样式来改变出错消息的格式
- 显示错误消息:如果是simple主题,可以通过<s:fielderror name="fieldName"></s:fielderror>来显示错误消息
- 去除filedError的ul li:template.simple的fielderror.ftl文件定义了simple主题下的s:fielderror标签的默认样式,所以修改其默认配置即可,在src目录下新建template.simple包,并新建fielderror.ftl,然后删除ul li即可
3.自定义类型转换器
- 为什么要自定义类型转换器:
- 因为struts不能自动完成从字符串到引用类型的转换
- 如何自定义类型转换器:
- 开发类型转换器的类:实现ognl.TypeConverter接口或对这个接口的某种具体实现做扩展
- 配置类型转换器:
- 基于字段的配置:
- 在该字段所在的Model(可能是Action,也可能是一个普通的JavaBean)所在的包下,新建一个ModelClassName-conversion.properties文件
- 在该文件中属于键值对:fieldName=类型转换器的全类名
- 第一次使用转换器时创建实例
- 基于类型的配置:
- 在src下新建xwork-conversion.properties
- 键入:待转换的类型=类型转换器的全类名
- 在当前struts2应用被加载时创建
- 类型转换器是单实例的!
4.类型转换与复杂对象配合使用
- form标签的name属性可以被映射到一个属性的属性
- 类型转换与Collection配合使用:
- Struts允许填充Collection里面的内容,这常见于需要快速录入批量数据的场合