• 笔记:Struts2 Action 非泛型集合元素类型转换


    1. 局部类型转换文件
      1. 局部类型转换文件的文件名应为 ActionName-conversion.properties,其中 ActionName 是需要替换为 Action 的类名称,后面的 conversion.properties 字符串则是固定部分,类型转换文件应该放在和Action类文件相同的位置。
      2. 为了指定非泛型集合元素的数据类型,需要指定二个部分:集合属性的名称、集合元素类型,在局部类型转换文件中指定如下key-value对即可:
        1. List 类型:
          1. Element_PropName=ElementTypePropName 表示 action 的属性名称,ElementType 表示完整的集合元素类型
        2. Map类型:
          1. Key_PropName=KeyTypePropName 表示 action 的属性名称,KeyType 表示完整的Key数据类型
          2. Element_PropName=ValueTypePropName 表示 action 的属性名称,ValueType 表示完整的Value元素类型
      3. 注册局部类型转换器,需要在局部类型转换文件中如下增加:

        PropName=自定义TypeConverter

    2. 全局类型转换器
      1. 全局类型转换器不是对指定Action的指定属性起作用,而是对指定类型起作用,注册全局类型转换起应该提供一个 xwork-conversion.properties 文件,该文件直接放在Web应用的WEB-INF/classes 路径下即可
      2. 文件内容由多项 PropType=ConvertClass 项组成,PropType 表示类型;ConvertClass 表示自定义类型转换器
    3. 自定义类型转换器
      1. 自定义类型转换器,必须实现 TypeConverter 接口,由于接口方法太过与复杂,所以提供了一个实现类 DefaultTypeConverter ,通常都采用扩展该类来实现自定义类型转换器,重写类的 convertValue 方法,方法声明如下:

        public Object convertValue(Map context,Object value,Class toType)

        context :类型转换环境的上下文

        value:是需要转换的参数,随着转换方向的不同,value参数值也是不一样,表示的是源类型

        toType:是转换后的目标类型

        也可以扩展 StrutsTypeConverter类,该类简化了类型转换器的实现,需要把字符串转换为复合类型则重写 convertFromString 抽象方法;需要把复合类型转换为字符串则重写 convertToString 抽象方法

    4. 类型转换错误处理
      1. Status 2 提供了一个名称为 ConversionError 的拦截器,这个拦截器被注册在默认的拦截器栈中,参考默认配置文件 struts-default.xml
      2. 如果Status 2 的类型转换器执行类型转换错误,拦截器将错误封装成表单域错误(FieldError),并将这些错误信息放入 ActionContext中,然后会跳转到名为 input 的逻辑视图
      3. 默认的提示错误为 invalid field value for field xxxx ,如果需要增加国际化的错误提示,则在全局资源文件中增加以下配置代码:

        xwork.default.invalid.fieldvalue={0}字段类型转换失败!

      4. 需要设置特定字段指定特别的提示信息,可以配置Action的局部资源文件来实现,配置代码如下:

        invalid.fieldvalue.propName=tipMsg

        其中 invalid.fieldvalue 为固定字符串,propName 为字段的名称,tipMsg 为具体的提示文本

           

           

       

    本文版权归作者 李雪(博客地址:https://www.cnblogs.wiki)所有,欢迎转载和商用,请在文章页面明显位置给出原文链接并保留此段声明,否则保留追究法律责任的权利,其他事项,可留言咨询。
  • 相关阅读:
    django之认证权限和接口
    序列化组件
    django中cbv源码和restful规范
    AjaxControlToolKit--TabContainer控件的介绍收藏[摘录]
    sublime text 3 激活
    sublime 2激活和解决中文乱码
    sublime text2 保存文件时候名字后缀.dump问题解决
    选项卡 刷新回原来页面的处理方法:
    关于C#自定义控件【摘录】
    比较好的GridView固定问题(链接)
  • 原文地址:https://www.cnblogs.com/li3807/p/6353859.html
Copyright © 2020-2023  润新知