Struts 2中内建了字符串类型和常见类型之间相互转换的转换器,能满足大多数转换需求,但不能完成字符串和User对象之间的转换。
  OGNL项目中有一个TypeConvert接口,这个接口是自定义类型转换器必须要实现的接口,OGNL还提供了一个实现类:

  DefaultTypeConverter,自定义类型转换器(UserConverter类)须重写DefaultTypeConverter类的convertValue()方法。该方法可以实现字符串和对象之前相互转换

注册局部类型转换器:注册局部类型转换器使用局部类型转换文件指定,只要在局部类型转换文件中添加:
<propName>=<ConverterClass>
#指定Action的user属性需要使用UserConverter类来完成类型转换
user=org.crazy.app.converter.UserConverter
至此,局部类型转换成功
全局类型转换器:注册全局类型转换器应该提供一个xwork-conversion.properties,该文件由多项
<propType>=<ConverterClass>项组成,

输入校验的流程
1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。
    不管类型转换是否出现异常,都会进入第3步。
3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4、再调用action中的validate()方法。
5、经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。

如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。

  输入校验:客户端校验为了防止正常浏览者的错误输入,能降低服务器端额负载,服务端防止恶意用户的恶意 行为
<!-- 指定age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>年纪必须在1到150之间</message>
</field-validator>
</field>
每个Action有一个检验文件,文件名应为ActionName-validation.xml
配置struts.xml文件
<!-- 用户注册的Action -->
<action name="regist" class="org.crazyit.app.action.RegistAction">
<!-- 类型转换失败、输入校验失败,转入input对应的视图 -->
<result name="input">/WEB-INF/content/registForm.jsp</result>
<result>/WEB-INF/content/show.jsp</result> </action>
在registForm.jsp中添加<s:fielderror>来输出错误提示。
手动完成校验需要重写validate()方法,重写validateXxx()方法

一、理解拦截器:
1.Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种

实现.需要时添加,不需要时取消该拦截器的配置即可。
2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截

器链中的拦截器就会按其之前定义的顺序被调用。拦截器栈中还可以包含另一个拦截器栈。
二、实现Struts2拦截器原理
Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后

串成一个列表,最后一个一个地调用列表中的拦截器

因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截

器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。
<!-- 应用所需使用的拦截器都在该元素下配置 -->
<interceptors>
<!-- 配置mySimple拦截器 -->
<interceptor name="mySimple"lass="org.crazyit.app.interceptor.SimpleInterceptor">
<!-- 为拦截器指定参数值 -->
<param name="name">简单拦截器</param>
</interceptor>
</interceptors>

<action name="login" class="org.crazyit.app.action.LoginAction">
<result name="error">/WEB-INF/content/error.jsp</result>
<result>/WEB-INF/content/welcome.jsp</result>
<!-- 配置系统的默认拦截器 -->
<interceptor-ref name="defaultStack"/>
<!-- 应用自定义的mySimple拦截器 -->
<interceptor-ref name="mySimple">
<param name="name">改名后的拦截器</param>
</interceptor-ref>
</action>

要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:包含init()、destory()、intercept()三个方法
AbstractInterceptor类提供init()、destory()方法的空实现,被不需要打开资源的拦截器继承可以简化操作
SimpleInterceptor extends AbstractInterceptor实现了intercept()方法,

Struts 2 类型转换器 输入校验 拦截器的更多相关文章

  1. Struts2各个功能详解(2)-输入校验和拦截器

    前面知道了struts2的架构图和struts2的自动封装表单参数和数据类型自动转换,今天来学struts2的第三第四个东西,输入校验和拦截器.  一:输入校验 客户端校验进行基本校验,如检验非空字段 ...

  2. struts2(三) 输入校验和拦截器

    前面知道了struts2的架构图和struts2的自动封装表单参数和数据类型自动转换,今天来学struts2的第三第四个东西,输入校验和拦截器, --WH 一.输入校验 在以前我们写一个登录页面时,并 ...

  3. JAVAEE——SSH项目实战05:用户注册、登陆校验拦截器、员工拜访客户功能和MD5加密

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7170519.html 一.用户注册   显示错误信息到页面上的另一种方法: public ...

  4. Struts2学习(三)———— 输入校验和拦截器

    一.输入校验 在以前我们写一个登录页面时,并没有限制用户的输入,不管用户输入什么,我们都存入数据库中,很显然这是不行的,我们需要检测用户输入的文本是否合法,是否符合我们需要的文本格式,符合菜放行,而s ...

  5. Struts(二十八):自定义拦截器

    Struts2拦截器 拦截器(Interceptor)是Struts2的核心部分. Struts2很多功能都是构建在拦截器基础之上,比如:文件上传.国际化.数据类型转化.数据校验等. Struts2拦 ...

  6. 案例47-crm练习登录校验拦截器

    1 LoginInterceptor package www.test.web.interceptor; import java.util.Map; import com.opensymphony.x ...

  7. 类型转换器(InitBinder 初始化绑定器)

    单日期格式 导入jar包 创建FirstController.java @Controller public class FirstController { /** * @param binder * ...

  8. springMVC 防重校验(拦截器)

    <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.bitspace. ...

  9. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. 无语的Filezilla

    之前也一直用filezilla,今天遇到个奇葩问题:在2008R2上装完filezilla server,本打算生成个证书用于SSL加密,没想到一直报错"Failed to initiali ...

  2. VMWare虚拟机端口转发

    # VMWare虚拟机端口转发 虚拟机和宿主机共用主机IP对外提供服务,又不想提供给虚拟机独立IP,使用VM虚拟机提供的端口转发功能正合适. ### 端口转发--------------------- ...

  3. PHP学习笔记(15)PDO数据库操作+AJAX无刷新技术删除用户

    pdo.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  4. :(23, 7) in class Queen, multiple overloaded alternatives of constructor Queen define default arguments. class Queen private(val name:String,prop:Array[String],private[scala02] val age:Int = 18){

  5. linux设置时间的方法

    0. date -R  中国上海的时区是+8000 1.tzselect 设置时区,依次选择5,9,1,1(如果时区不一样,执行下面的命令得到之后时间是不一样的) 2.sudo ntpdate asi ...

  6. [转]Python定时任务框架APScheduler

    APScheduler是基于Quartz的 一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以 持久化任务 ...

  7. 在32位Centos6.4上安装GraphicsMagick

    安装时,make总是有如下错误,最后几行 /bin/sh ./libtool --tag=CC --mode=link gcc -std=gnu99 -g -O2 -Wall -pthread -ld ...

  8. hdu6060 RXD and dividing 贪心

    /** 题目:hdu6060 RXD and dividing 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6060 题意:贪心 给定一颗树,n个节点,编 ...

  9. 如何Vue-cli开始使用在Vue.js项目中启动TDD(测试驱动开发)

    通常,使用测试驱动开发(TDD)最困难的部分是开始.你必须下载带有奇怪依赖项的软件包,让测试套件与你的构建系统协同工作,然后你必须弄清楚如何编写一个测试!难怪这么多的开发者在你提起它的时候就开始跑开了 ...

  10. redis-trib构建集群

    https://blog.csdn.net/qq_35946990/article/details/78957618