1、编写校验规则文件
(<ActionName>-validation.xml),文件放在Action类文件相同的路径下校验失败返回input的result。
 

 
  <validators>
    <!-- 校验Action的name属性 -->
    <field name="name">
        <!-- 指定name属性必须满足必填规则 -->
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key="name.requried"/>     <!--国际化信息(国际化资源文件中有name.requried=必须输入用户名)-->
        </field-validator>
        <!-- 指定name属性必须匹配正则表达式 -->
        <field-validator type="regex">
            <param name="regex"><![CDATA[(\w{4,25})]]></param>
            <message key="name.regex"/>
        </field-validator>
    </field>
  <!-- 指定age属性必须在指定范围内-->
    <field name="age">
        <field-validator type="int">
            <param name="min">1</param>
            <param name="max">150</param>
            <message key="age.range"/>
        </field-validator>
    </field>
    <!-- 指定birth属性必须在指定范围内-->
    <field name="birth">
        <field-validator type="date">
            <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->
            <param name="min">1900-01-01</param>
            <param name="max">2050-02-21</param>
            <message key="birth.range"/>
        </field-validator>
    </field>
</validators>            

2、使用客户端校验
    1)将输入页面表单元素改为使用Struts2标签来生成表单。
    2)为该<s:form../>元素增加validate=“true”属性。
        <s:fielderror/>
                <s:form action="regist" validate="true">
                <s:textfield name="name" label="用户名"/>
                <s:textfield name="pass" label="密码"/>
                <s:textfield name="age" label="年龄"/>
                <s:textfield name="birth" label="生日"/>
                <s:submit value="注册"/>
        </s:form>
 
     客户端校验仍然是基于JavaScript的,因为JS本身的限制,有些服务器端校验不能转换成客户端校验。
        客户端校验仅支持下面几种:    
                required validator必填校验器
                requiredstring validator必填字符串校验器
                stringlength validator字符串长度校验器
                regex validator表达式校验器
                email validator邮件校验器
                url validator网址校验器
                int validator整数校验器
                double validator双精度
    
          客户端校验需要注意
                    不要将<s:form../>元素的theme属性指定为simple
                    浏览器直接访问启用客户端校验的表单页会引发异常,可把这些表单放WEB-INF下,通过核心Filter后再访问
                    如果客户端校验需要输出国际化提示信息,则需要使用全局国际化资源文件,不能使用Action范围的文件
                    启用客户端校验的表单页面的action和namespace要分开写(<s:form action="regist"                                                                                                                             namespace="/wj"> not <s:form action="wj/regist">)
 
3、校验器配置风格
        字段校验器风格
              参考1里面的校验文件      
        非字段校验器风格
            <!-- 配置指定必填字符串的校验器 -->
          <validator type="requiredstring">
            <!-- 使用该校验器校验name属性 -->
            <param name="fieldName">name</param>
            <param name="trim">true</param>
            <!-- 指定校验失败后输出name.required对应的国际化信息 -->
            <message key="name.requried"/>
        </validator>
        <!-- 配置指定正则表达式的校验器 -->
        <validator type="regex">
            <!-- 使用该校验器校验name属性 -->
            <param name="fieldName">name</param>
            <param name="trim">true</param>
            <param name="regex"><![CDATA[(\w{4,25})]]></param>
            <!-- 指定校验失败后输出name.required对应的国际化信息 -->
            <message key="name.regex"/>
        </validator>
 
4、短路校验器
            <field-validator type="requiredstring" short-circuit="true">
        
5、校验文件搜索规则
            遇到下列情况时:
          <action name="*Pro" class="org.crazyit.app.action.RegistAction"
            method="{1}">
            解决方案:
            为校验规则文件添加Action别名来指定需要校验的处理逻辑:
            <ActionClassName>-<ActionAliasName>-validation.xml
               
             假设系统有两个Action:BaseAction和RegistAction,RegistAction继承了BaseAction,系统搜索文件顺序如下:
                1)BaseAction-validation.xml
                2)BaseAction-别名-validation.xml
                3)RegistAction-Validation.xml
                4)RegistAction-别名-validation.xml
                搜索到第一个校验文件后,还会继续搜索。
                搜索从上到下,实际规则是所有规则总和,有冲突时,以后面规则为准。
 
6、校验顺序和短路
            校验器执行顺序有如下原则:
                    先非字段风格校验器,再字段;排在前面的先执行。
            校验器短路原则:
                    所有非字段校验器优先,某个非字段校验器失败,对应字段的字段校验器不再校验,其他非字段校验器仍要执行,字段校验器失败后的其他字段校验器不会执行。
            
7、内建校验器
               Struts2包下xwork-2.3.16.3.jar中com\opensymphony\xwork2\validator\validators 下的default.xml文件。
  

 
                  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Definition 1.0//EN"
 
<!-- START SNIPPET: validators-default -->
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!--  END SNIPPET: validators-default -->

8、基于注解的输入校验
        可以简化开发,但是会给维护带来一定的困难
    
    // 使用注解指定必填、正则表达式两个校验规则
    @RequiredStringValidator(key = "name.requried"
        , message = "")
    @RegexFieldValidator(regex = "\\w{4,25}"
        ,key = "name.regex" , message = "")
    public void setName(String name)
    {
        this.name = name;
    }
    // age的setter和getter方法
    @IntRangeFieldValidator(message = ""
        , key = "age.range", min = "1"
        , max = "150")
    public void setAge(int age)
    {
        this.age = age;
    }
 
    // birth的setter和getter方法
    @DateRangeFieldValidator(message = ""
        , key = "birth.range", min = "1900/01/01"
        , max = "2050/01/21")
    public void setBirth(Date birth)
    {
        this.birth = birth;
    }
 
 
9、手动完成输入校验
        1)重写validate()方法
        2)重写validateXxx方法
 
10、Struts2输入校验步骤
        1)类型转换器对字符串的请求参数执行类型转换,并将这些值设置为Action属性值。
        2)类型转换过程中如果出现异常,将异常信息保存到ActionContext中,conventionError拦截器负责将其封装到FieldError里。
        3)使用Struts2中配置的校验器进行输入校验。
        4)通过反射调用validateXxx()方法。
        5)调用validate()方法。
        6)若没有出现FieldError时调用Action里的处理方法,出现了则转入input逻辑视图所指定的视图资源。
 
 

Struts2输入校验的更多相关文章

  1. 笔记:Struts2 输入校验

    Struts2的输入校验包含了客户端校验和服务器端校验,通过编写校验规则文件来实现输入校验,需要增加 Convention 插件,将 struts2-convention-plugin-2.3.31. ...

  2. Struts2输入校验(XML方式)

    本章主要介绍struts2的XML配置方式输入校验.以下将结合一个实例程序进行说明. 代码结构: 关键代码: RegistAction.javapackage com.alfred.regist.ac ...

  3. Struts2输入校验(编码方式)

    struts2对用户输入数据的校验方法有两种方式,一种是通过编码的方式,另一种则是通过使用XML配置方式. 本章主要介绍struts2编码方式的输入校验.以下将结合一个实例程序进行说明. 代码结构: ...

  4. Struts2 输入校验 第四弹

    ActionSupport 里面有一个validate.可以重写里面你的方法. 校验执行流程: 1)首先进行类型转化 2)然后进行输入校验(执行validate方法) 3)如果在上述过程中出现了任何错 ...

  5. Struts2 输入校验(使用编码方式)

    一.Struts输入校验 1.创建register.jsp <%@ page language="java" contentType="text/html; cha ...

  6. struts2对action中的方法进行输入校验(2)

    struts2输入校验流程: 1.类型转换器对请求參数运行类型转换,并把转换后的值赋给aciton中的属性 2.假设在运行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext, ...

  7. JavaWeb框架_Struts2_(六)----->Struts2的输入校验

    1. 输入校验章节目录 输入校验概述 客户端校验 服务器端校验 手动编程校验 重写validate方法 重写validateXxx()方法 输入校验流程 校验框架校验 Struts2 内置的校验器 常 ...

  8. Struts 2(五):输入校验 & 校验框架

    第一节 Struts2输入校验 1.1 输入校验的重要性 输入校验分为客户端校验和服务器端校验.客户端校验用来过滤用户的错误操作,一般使用JavaScript代码实现.服务器端校验用来防止非法用户的恶 ...

  9. Struts2的输入校验(2)——客户端校验

    Struts2的输入校验(2) --客户端校验 Struts2客户端校验的使用: (1)使用Struts2的标签生成输入页面的表单: (2)为该<s:form>元素添加validate=& ...

随机推荐

  1. Tomcat内存不足的解决办法

    Tomcat增加内存 -Xms512m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=512m -DCOM.HUATENG.PRODUCTION_MODE=fa ...

  2. First Adventures in Google Closure -摘自网络

    Contents Introduction Background Hello Closure World Dependency Management Making an AJAX call with ...

  3. php非阻塞执行系统命令

    大家都知道php调用系统命令常用的主要有以下几种方法: 如exec(), system(), passthru(), shell_exec() 这几个函数的用法在此不做说明,有需要的请查阅php相关手 ...

  4. Java SE Eclipse中引入第三方jar及class

    使用eclipse开发Java SE 总免不了需要引入第三方的jar或者calss文件.这里给大家说一下如何在eclipse中引入第三方jar或者calss文件. 让我们先了解一下eclipse项目中 ...

  5. linux IO 内核参数调优 之 原理和参数介绍

    1.  page cache linux操作系统默认情况下写都是有写缓存的,可以使用direct IO方式绕过操作系统的写缓存.当你写一串数据时,系统会开辟一块内存区域缓存这些数据,这块区域就是我们常 ...

  6. MySQLdb安装和使用2

    http://blog.chinaunix.net/uid-8487640-id-3183185.html MySQLdb是Python连接MySQL的模块,下面介绍一下源码方式安装MySQLdb: ...

  7. 不一样的风格,C#的lambda表达式

    下面贴出代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  8. C# winform线程的使用 制作提醒休息小程序(长时间计算机工作者必备)

    最近发现日常的工作中,经常因为敲代码而忘记了休息,晚上眼睛特别的累. 并且经常长时间看着显示器,对眼睛一定是不好的,所以今天开发了一个小程序,用于提醒休息. 下面先看看运行效果: 1.程序启动后,后台 ...

  9. c#获取远程图片的方法

    public static int SaveImageFromWeb(string imgUrl, string path) { var aaa = Environment.CurrentDirect ...

  10. C#语法糖之第三篇: 匿名类 & 匿名方法

    今天时间有点早,所以上来在写一篇文章吧,继续上一篇的文章,在我们平时编程过程中有没有遇到过这样的一个情景,你定义的类只是用来封装一些相关的数据,但并不需要相关联的方法.事件和其他自定义的功能.同时,这 ...