Stuts学习day2-自定义参数-数据校验
一、自定义结果类型
1、编写一个类,实现com.opensymphony.xwork2.Result接口。
在该方法中可以拿到ServletAPI去完成你的功能
2、声明自定义的结果类型:先声明后使用
3、使用
小技巧:自定义的结果视图,大家都要用时
二、封装请求参数(很重要)
使用框架的意义:提升开发效率。节省的时间去研究业务。
2.1封装请求参数的方式:
- 1、用动作类作为模型对象,直接封装请求参数
a、通过配置文件注入静态(不变)参数
注:静态参数注入是由一个名字为staticParams拦截器完成的。
b、注入动态(用户输入的)参数
编写原则:表单的输入域的名称和动作类中的属性名(getter和setter)保持一致。
注:动态参数注入是由一个名字为params拦截器完成的。
- 2、动作类和模型对象分离
---------------------------------------------
--------------------------------------------
-----------------------------
总结:框架会探测student这个模型是否为空,如果为空,注入他的实例,分别调用该对象的属性,注入值。
- 3、(模型和动作分开)模型驱动:ModelDriven
-----------------
-----------------------
注:实际上是一个名字为modelDriven拦截器完成的。该拦截器会在调用动作方法前,调用getModel(),得到模型对象,他接着把该模型对象压到了值栈的栈顶。表单的username的值,框架就会调用栈顶对象的setUsername方法。(此处暂时记住)。
关键点:实现ModelDriven接口;模型对象要自己实例化;
2.2封装集合或Map的数据(用的较少)
a、封装集合,批量添加时用
b、封装到Map中,批量添加时用
三、类型转换(明白,开发中几乎不写)
1、用户所有的输入都是字符串
2、显示出来的都是字符串
总结:类型转换。String--->其他类型(存数据时);其他类型----->字符串(显示数据时)
Struts2中的类型转换器的继承体系
3、自定义类型转换器
a、编写一个类,继承StrutsTypeConverter
b、注册类型转换器
b.1局部类型转换器:给某个动作用的
在动作类所在的包中,建立一个“动作类名-conversion.properties”的配置文件,内容如下:
b.2全局类型转换器:大家都来用
在构建路径的顶端(WEB-INF/classes)目录下建立名称为xwork-conversion.properties的配置文件,按照要转换的目标类型进行转换器的配置。
4、转换失败时的数据回显和错误提示
前提:动作类需要继承ActionSupport
出现转换失败时,由一个名字为conversionError拦截器负责处理的。会把错误信息封装起来,并且转向一个叫做input的逻辑视图(用于回显数据)。
更改默认的错误提示:
在动作类的包中,建立一个“动作类名.properties”的配置文件(实际上是一个语言消息包),内容如下:
四、数据校验(经常做)
4.1校验的方式
客户端校验:JavaScript
服务器端校验:代码
实际开发:客户端+服务器端校验
4.2Struts2的服务器校验
前提:动作类需要继承ActionSupport
验证是由一个名字为validation(声明式校验)、workflow(错误提示)完成的
a、编程式校验:动作类中写代码
a.1针对动作类中的所有动作方法进行校验
在动作类中,覆盖掉validate方法
a.2针对动作类中的指定方法进行校验
方式一:麻烦
方式二:使用注解,简单
b、声明式校验(推荐):写配置文件
把校验规则和消息提示放到配置文件中。
b.1针对动作类中的所有动作方法进行校验
在动作类所在的包中,建立名字为"动作类名-validation.xml"的配置文件,内容如下:
b.2针对动作类中的指定方法进行校验
方式一:简单。使用@SkipValidation注解
方式二:麻烦。
动作类名-动作别名(指struts.xml中动作的名称)-validation.xml
专题:Struts2框架提供的内置验证器
xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validators\default.xml
b.3自定义声明式校验器
a、编写一个类,继承FieldValidatorSupport,定义一个基于字段的验证器。
b、定义验证器后才能使用。
在WEB-INF/classes目录下,建立一个名称为validators.xml的配置文件,内容如下:
c、日后就可以在声明式验证中使用了
五、国际化(鸡肋)
六、Struts2中的拦截器(很重要)
七、文件的上传和下载