• 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里面的内容,这常见于需要快速录入批量数据的场合
  • 相关阅读:
    Drupal 学习笔记 (4)
    property和field有什么区别
    Razor4Orchard v1.2
    Mono喜迁新家http://www.xamarin.com/
    jq中获取属性名的方法
    jquery中的文档操作之五
    PHP基础知识之三
    php基础知识之一
    注意点
    jquery中ajax的学习之$.ajax()
  • 原文地址:https://www.cnblogs.com/lxc-2017/p/8530405.html
Copyright © 2020-2023  润新知