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. Centos6.x X64 飞信安装

    Centos6.x X64 飞信安装 1,安装飞信依赖包 yum -y install glibc.i686 krb5-libs.i686 libstdc++.i686 zlib.i686 --set ...

  2. 手动进行Excel数据和MySql数据转换

    今天是全国数学建模比赛,同学选的一个题目需要对一个large的Excel表格进行统计,好哥们儿嘛--便帮助他完成了数据从Excel到MySql的转化.记下具体步骤分享给大家,也免得大家到网上到处乱找了 ...

  3. 什么时候使用Shell

    因为Shell似乎是各UNIX系统之间通用的功能,并且经过了POSIX的标准化.因此,Shell脚本只要“用心写”一次,即可应用到很多系统上.因此,之所以要使用Shell脚本是基于: 简单性:Shel ...

  4. 1109 html5 xhtml;

    XHTML 是 XML 风格的 HTML 4.01. HTML5 是下一代 HTML,取代 HTML 4.01. XHTML是基于XML发布的HTML规范,旨在规范HTML的格式. 两者提出的目的是不 ...

  5. AndroidHttp通信 HTTP Client与HttpURLConnection的区别

    Apache HTTP Client DefaultHttpClient 以及其相关类AndroidHttpClient 适用于 web browsers, 他们是可扩展的,并且拥有大量的稳定APIs ...

  6. The server does not support version 3.1 of the JEE Web module specification.

    使用MyEclipse2015打开MyEclipse2014编辑的项目,在服务器Tomcat 7部署时,提示"The server does not support version 3.1 ...

  7. 337. House Robber III

    二刷吧..不知道为什么house robbery系列我找不到笔记,不过印象中做了好几次了. 不是很难,用的post-order做bottom-up的运算. 对于一个Node来说,有2种情况,一种是选( ...

  8. fiddler 抓包post请求body参数在jmeter中的书写

    jmeter请求一直报错,最后查出来是请求参数的格式写错了,醉了 记录一下,以防我再次健忘 fidder抓包显示详情 jmeter 请求body data参数书写直接复制fiddler里TextVie ...

  9. EXCEL 2010学习笔记—— 动态图表

    今天梳理一下动态图表的相关内容,做一个简单的整理 关键的操作点: 1.插入动态控制器:开发工具->插入->表单控件 对控件进行修改  右键 设置控件格式->单元格链接 用来作为if ...

  10. appium

    电话键 KEYCODE_CALL 拨号键 5KEYCODE_ENDCALL 挂机键 6KEYCODE_HOME 按键Home 3KEYCODE_MENU 菜单键 82KEYCODE_BACK 返回键 ...