struts2 类型转换

时间:2023-03-09 01:47:03
struts2 类型转换

概述

从一个 HTML 表单到一个 Action 对象, 类型转换是从字符串到非字符串.

在 struts2 中, 把请求参数映射到 action  属性的工作由 Parameters 拦截器负责, 它是默认的 defaultStack 拦截器中的一员. Parameters 拦截器可以自动完成字符串和基本数据类型之间转换.

类型转换错误

如果类型转换失败:

  –若 Action 类没有实现 ValidationAware 接口: Struts 在遇到类型转换错误时仍会继续调用其 Action 方法, 就好像什么都没发生一样.

  –若 Action 类实现 ValidationAware 接口:Struts 在遇到类型转换错误时将不会继续调用其 Action 方法:  Struts 将检查相关 action 元素的声明是否包含着一个 name=input 的 result.  如果有, Struts 将把控制权转交给那个 result  元素; 若没有 input 结果, Struts 将抛出一个异常

类型转换错误消息的定制

作为默认的 default 拦截器的一员, ConversionError 拦截器负责添加与类型转换有关的出错消息(前提: Action 类必须实现了 ValidationAware 接口)和保存各请求参数的原始值.

若字段标签使用的不是 simple 主题, 则非法输入字段将导致一条有着以下格式的出错消息: Invalid field value for field fieldName.

覆盖默认的出错消息

  –在对应的 Action 类所在的包中新建  ActionClassName.properties 文件, ClassName 即为包含着输入字段的 Action 类的类名

  –在属性文件中添加如下键值对: invalid.fieldvalue.fieldName=error message     (eclipse 会自动转换汉字).

定制出错消息的样式:

  –每一条出错消息都被打包在一个 HTML span 元素里, 可以通过覆盖其行标为 errorMessage 的那个 css 样式来改变出错消息的格式.

显示错误消息: 如果是 simple 主题, 可以通过 <s:fielderror fieldName=“filedname”></s:fielderror> 标签显示错误消息

如何自定义类型转换器 ?

  1). 为什么需要自定义的类型转换器 ? 因为 Struts 不能自动完成 字符串 到 引用类型 的 转换.

  2). 如何定义类型转换器:

    I.  开发类型转换器的类: 扩展 StrutsTypeConverter 类.

    II. 配置类型转换器:

    有两种方式: ①. 基于字段的配置:

      > 在字段所在的 Model(可能是 Action, 可能是一个 JavaBean) 的包下, 新建一个 ModelClassName-conversion.properties 文件
           > 在该文件中输入键值对: fieldName=类型转换器的全类名.
           > 第一次使用该转换器时创建实例.
           > 类型转换器是单实例的!

    ②. 基于类型的配置:
           > 在 src 下新建 xwork-conversion.properties
           > 键入: 待转换的类型=类型转换器的全类名.
           > 在当前 Struts2 应用被加载时创建实例.

类型转换与复杂属性配合使用

form 标签的 name 属性可以被映射到一个属性的属性.

类型转换与 Collection 配合使用

Struts 还允许填充 Collection 里的对象, 这常见于需要快速录入批量数据的场合