1、Action概述
2、Action中访问WEB资源
①ActionContext
②XXXAware接口
③ServletActionContext
④ServletXXXAware接口
3、关于struts2请求的扩展名问题
4、ActionSupport
5、result
6、关于值栈
7、利用s:propety标签和Ognl表达式读取值栈的属性值
8、Action实现ModelDriven接口后的运行流程
9、使用paramPrepareParamsStack拦截器后的运行流程
10、关于PrepareInterceptor
11、ValidationAware
从一个HTMl到一个Action对象,类型转化你是从字符串到非字符串。
首先,HTTP没有“类型” 的概念,每一项表单的输入值可能是从一个字符串或一个字符串数组,在server端,必须把String转换成特定的数据类型。
struts2中,把请求参数映射到action属性的工作由Parameters拦截器负责,它是默认的defaultStack拦截器中的一份子,Parameters拦截器可以自动完成字符串和基本数据类型之间的转换。
类型的转换错误
若Action类没有实现ValidationAware接口:struts在遇到类型转换错误时,仍然会调用Action方法,仿佛什么都没有发生。
若action类实现了ValidationAware接口: struts在遇到类型转换错误时将不会继续调用其Action方法;struts将检查相关action元素的声明是否包含一个name=input的result。如果有,struts将把控制权交给result元素;如果没有input结果,struts将抛出一个异常。
继承ActionSupport来间接实现ValidationAware接口
[java] view plain copy print?
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable
下面看一个例子
此时还没有继承ActionSupport类
两个输入结果分别是
可以看到确实执行了Action方法;再看一下继承了ActionSupport的Action类
下面给Aciton配置一个result标签
再看一下执行结果
可以看到返回了一个错误提示;那么这个错误提示可以被覆盖吗?那就要用到ConversionError拦截器;其负责添加与类型转换错误有关的错误信息(前提,Action实现了ValidationAware接口),而且还能保存各请求参数的原始值。
覆盖默认的错误消息
在对应的Action类所在的保重新建ActionClassName.properties文件,ActionClassName为输入字段的Action类的类名
在属性文件中添加如下键值对:invalid.fieldvalue.fieldName=xxx
![]()
再看一下执行结果
![]()
若字段标签使用的不是Simple主题,责非法输入字段将导致不提示错误消息,那就需要手动去添加错误消息
使用s:debug查看栈顶属性
![]()
看到值栈里有fieldErrors属性里面存放了我们的错误信息,该属性为Map<ring,List<String>>
类型,可以通过EL或者OGNL方式来显示错误信息.
12、自定义类型转换器
13、类型转换器与复杂属性&集合协同使用
14、国际化
15、Struts2运行流程分析
16、Struts2的验证
17、文件的上传与下载
18、表单的重复提交问题
19、自定义拦截器