06_类型转换

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里面的内容,这常见于需要快速录入批量数据的场合
posted @ 2018-03-08 19:30  清汤白面  阅读(111)  评论(0编辑  收藏  举报