类型转换器
1. 自动类型转换
Struts2内置了一些类型转换器,可以由String类型转换为相应类型
- int/Integer
- long/Long
- float/Float
- double/Double
- char/Character
- boolean/Boolean
- Date:可以接受yyyy-MM-dd HH:mm:ss格式字符串
- 数组
- Map/List
2.自定义类型转换器
①定义
自定义一个类,继承DefaultTypeConverter,并重写public Object convertValue(Object value, Class toType) 方法
value:待转换的字符串
toType:要转成的目标类型
②注册
- 局部类型
在Action类所在包下放置如下格式属性文件:ActionClassName-conversion.properties
属性文件内容:
属性名称=类型转换器的全类名 - 全局类型
在src目录下放置属性文件,名称为xwork-conversion.properties
属性文件内容:
待转换的类型=类型转换器全类名
数据验证
对Action中的所有方法进行验证
①定义
首先,Action要继承ActionSupport类,重写validate方法,Action中所有Action方法在执行之前,validate方法均会被调用,以实现对数据的验证。
②结果
当数据验证失败时,struts会调用addFieldError()向系统的fieldErrors集合中添加失败信息,如果fieldErrors中包含失败信息,struts2会将请求转发到名为
input的Result中,在input视图中可以使用< s:fielderror/ >获取出错信息。
拦截器
拦截器可以在执行Action方法之前后之后拦截下用户的请求,执行一些操作,即在Action方法执行之前或之后执行,以增强Action方法的功能。
1.自定义拦截器
普通的拦截器需要实现拦截器接口Interceptor,该接口有三个方法:
- public void init();//拦截器实例被创建之前被调用
- public void destroy();//拦截器实例被销毁之前被调用
- public String interceptor(ActionInvocation invocation) throws Exception;//主要的拦截方法,在Action执行之前被调用,拦截器的附加功能在该方法中实现,
参如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。如果不需要调用后续的方法,则返回一个String类型的对象即可。
2.注册拦截器
在struts.xml中注册,如:
<interceptor-ref name="checkbox">
<param name="uncheckedValue">0</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/><!--最后一定要引用struts2自带的拦截器缺省堆栈defaultStack-->