尚硅谷学习笔记--Struts2 类型转换(1)

概述

为什么要类型转换?
从一个 HTML 表单到一个 Action 对象, 类型转换是从字符串到非字符串. 但是HTTP 没有 “类型” 的概念. 每一项表单输入只可能是一个字符串或一个字符串数组. 在服务器端, 必须把 String 转换为特定的数据类型。

Struts2提供的类型转换

Parameters拦截器可以自动完成字符串和基本数据类型转换。

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

如果出现类型转换错误的处理方式:

若 Action 类没有实现 ValidationAware 接口:

Struts 在遇到类型转换错误时仍会继续调用其 Action 方法, 就好像什么都没发生一样。

若 Action 类实现 ValidationAware 接口:

由于实现ValidationAware 接口要实现的方法较多,可以通过继承ActionSupport类来代替。

Struts 在遇到类型转换错误时将不会继续调用其 Action 方法: Struts 将检查配置文件中相关action 元素的声明是否包含着一个 name=inputresult.
如果有, Struts 将把控制权转交给那个 result 元素(一般将这个result会定位到原表单的输入页),非法输入字段将导致一条有着以下格式的出错消息( 若字段标签使用的不是 simple 主题):
Invalid field value for field "age".
并且能够实现表单回显。这个出错消息和表单回显内容是由默认的 default 拦截器的一员, ConversionError 拦截器负责添加与类型转换有关的出错消息(前提: Action 类必须实现了 ValidationAware 接口)和保存各请求参数的原始值。

那么我们怎样修改默认的提示错误信息呢?

1、覆盖默认的出错消息
在对应的 Action 类所在的包中新建 ActionClassName.properties 文件, ActionClassName 即为包含着输入字段的 Action 类的类名
在属性文件中添加如下键值对: invalid.fieldvalue.fieldName=message

例如:Action名为ConversionAction 字段名为age则在Action同一个包中创建ConversionAction.properties文件,并添加invalid.fieldvalue.age=輸入的格式不正確这样就可以把默认的提示信息覆盖为“輸入的格式不正確”。

2、定制出错消息的样式
有时候由于需要将主题设置为simple,这样系统不会默认给出提示信息,那么通过是s:debug标签可以知道若转换出错, 则在值栈的 Action(实现了 ValidationAware 接口) 对象中有一个 fieldErrors 属性.该属性的类型为 Map<String, List<String>> 键: 字段(属性名), 值: 错误消息组成的 List. 所以可以使用 LE 或 OGNL 的方式来显示错误消息: ${fieldErrors.age[0]}
值栈错误消息截图
还可以通过struts2提供的标签来显示错误信息<s:fielderror fieldName=“age”></s:fielderror>但是这样的话,每一条出错消息都被打包在一个 HTML span 元素里, 要想将其样式消除,则要覆盖系统顶一顶样式。系统定义的样式在struts2核心jar包下的 template.simple 下面的 fielderror.ftl 定义了 simple 主题下, s:fielderror 标签显示错误消息的样式. 所以修改该配置文件即可。

在 src 下新建 template.simple 包, 新建 fielderror.ftl 文件, 把原生的 fielderror.ftl 中的内容复制到新建的 fielderror.ftl 中, 然后剔除 ul, li, span 部分即可。具体请看视频。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值