Struts框架_6 类型转换

类型转换:从一个HTML表单到一个Action对象,类型转换是从字符串到非字符串.
HTTP没有"类型”的概念.每- -项表单输入只可能是一个字符串或一个字符串数组在服务器端,必须把String转换为特定的数据类型
在struts2中,把请求参数映射到action属性的工作由Parameters拦截器负责,它是默认的defaultStack拦截器中的一员. Parameters 拦截器可以自动完成字符串和基本数据类型之间转换.

如果类型转换失败:
若Action类没有实现ValidationAware接口: Struts 在遇到类型转换错误时仍会继续调用其Action方法,就好像什么都没发生一样.
若Action类实现ValidationAware接口: Struts 在遇到类型转换错误时将不会继续调用其Action方法: Struts 将检查相关action元素的声明是否包含着一个name=input的,result.如果有,Struts将把控制权转交给那个result元素;若没有Tnput结果, Struts将抛出一个异常
ActionSupport实现了该接口,所以直接继承即可:

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


问题2:如果是simple主题,不会显示错误,怎么办?

1).通过debug标签,可知若转换出错,则在值栈的Action(实现了ValidationAware接口)对象中有一个fieldErrors属性.
该属性的类型为Map<String, List<String>> 键:字段(属性名),值:错误消息组成的List.所以可以使用LE或OGNL的方式来显示错误消息: ${fieldErrors. age[0]}


2).还可以使用 s:fielderro标签来显示。可以通过fieldName属性显示指定字段的错误.

3.若是simple 主题,且使用<s:fielderror fieldName= "age" ></s:fielderror>来显示错误消息,则该消息在一个ul, 11, span中。如何去除ul, 1i, span呢?
在template. simple下面的fielderror.ft1定义了simple主题下,s:fielderror 标签显示借误消息的样式,所以修改该
配置文件即可。在src下新建template.simple 包,新建fielderror.ftl文件,把原生的fielderror .ft1中的内容
复制到新建的fielderror.ftl中,然后剔除u1, 1i, span部分即可.
 

自定义类型转换器:

自定义类型转换器必须实现ongl.TypeConverter接口或对这个接口的某种具体实现做扩展。

StrutsTypeConverter实现了上述接口,所以可以直接继承。

问题4.如何自定义类型转换器?
1).为什么需要自定义的类型转换器?因为Struts不能自动完成字符串到引用类型的转换。
2).如何定义类型转换器: 
I.开发类型转换器的类: 扩展StrutsTypeConverter类.


II.配置类型转换器:
有两种方式
①。基于字段的配置:
在字段所在的Model(可能是Action,可能是一 个JavaBean)的包下,新建一 个ModelClassName-conversion . properties
在该文件中输入键值对: fieldName=类型转换器的全类名.

第一次使用该转换器时创建实例.
类型转换器是单实例的!

②。基于类型的配置:
在src下新建xwork-conversion. properties
键入:待转换的类型=类型转换器的全类名。

在当前Struts2应用被加载时创建实例。

在配置文件中规定格式。

1. Department 是模型,实际录入的Department. deptName 可以直接写到s:textfield的name属性中。那mgr属性如何处理呢?
struts2表单标签的name值可以被赋为属性的属性: name=mgr . name, name=mgr . birth


2. mgr中有一个Date类型的birth属性,Struts2 可以完成自动的类型转换吗?
全局的类型转换器可以正常工作

结合集合获取表单属性:
表单中的存放方式:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值