码迷,mamicode.com
首页 > 其他好文 > 详细

【毕设进行时】Struts2的输入校验

时间:2015-05-16 10:28:30      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

输入校验分为客户端校验和服务器校验。Struts2可以同时完成这两种校验。

All input is evil.——《Writing Secure Code》

手动完成输入校验:

  1. 重写Action中的validate()方法(继承自ActionSupport类)
  2. 重写Action中的validateXxx()方法并在struts.xml中配置,validateXxx()方法先于validate()方法被调用

流程:

  1. 类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成Action的属性值
  2. 在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中,conversationError拦截器负责将其封装到fieldError里,然后执行第3步;如果转换过程没有异常信息,直接进入第3步
  3. 通过反射调用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法名
  4. 调用Action类里的validate()方法
  5. 如果经过上面4步都没有出现fieldError,将调用Action里处理用户请求的处理方法;如果出现了fieldError,系统将转入input逻辑视图所指定的视图资源

基本输入校验(推荐):

  1. 编写校验规则文件(XML配置文件),文件名命名方式为<Action名字>-validation.xml,并于Action类文件保存在相同路径下。
  2. 为个别处理逻辑检验的文件名命名方式为<Action名字>-<处理方法名>-validation.xml,同样要与Action类文件保存在同一路径下。
  3. 国际化提示信息(略)
  4. 使用客户端校验,使用Struts表单标签,并增加validate="true"属性
  5. 检验文件的搜索规则,BaseAction-validation.xml→BaseAction-别名-validation.xml→XxxAction-validation.xml→XxxAction-别名-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">


<validators>
    
    <!-- 必填校验 -->
    <field name="字段名">
        <field-validator type="required" [short-circuit="true"]>
            <message>错误提示信息</message>
        </field-validator>
    </field>
    
    <!-- 必填字符串校验 -->
    <field name="字段名">
        <field-validator type="requiredstring" [short-circuit="true"]>
            <param name="trim">默认为true</param>  <!-- 是否在检验前截断被检验属性值前后的空白 -->
            <message key="没有填写密码!" />
        </field-validator>        
    </field>
    
    <!-- 整数校验 -->
    <field name="字段名">
        <field-validator type="int" [short-circuit="true"]>
            <param name="min">最小值</param>
            <param name="max">最大值</param>
            <message>错误提示信息</message>
        </field-validator>
    </field>
    
    <!-- 日期校验 -->
    <field name="字段名">
        <field-validator type="date" [short-circuit="true"]>
            <param name="min">1990-01-01</param>
            <param name="max">2010-01-01</param>
            <message>错误提示信息</message>
        </field-validator>
    </field>
    
    <!-- 表达式校验 -->
    <validator type="expression" [short-circuit="true"]>
            <param name="expression">逻辑表达式</param>  <!-- 返回false则校验失败,输出信息 -->
            <message>错误提示信息</message>
    </validator>
    
    <!-- 字段表达式校验 -->
    <field name="字段名">
        <field-validator type="fieldexpression" [short-circuit="true"]>
            <param name="expression">逻辑表达式</param>  <!-- 返回false则校验失败,输出信息 -->
            <message>错误提示信息</message>
        </field-validator>
    </field>
    
    <!-- 邮件地址校验 -->
    <field name="字段名">
        <field-validator type="email" [short-circuit="true"]>
            <message>错误提示信息</message>
        </field-validator>
    </field>
    
    <!-- 网址校验 -->
    <field name="字段名">
        <field-validator type="url" [short-circuit="true"]>
            <message>错误提示信息</message>
        </field-validator>
    </field>
    
    <!-- Visitor校验:校验Action类里的非基本属性 -->
    <field name="字段名">
        <field-validator type="visitor" [short-circuit="true"]>
            <param name="context">字段名Context</param>  <!-- 调用Action-字段名Context-validation.xml -->
            <param name="appendPrefix">true</param>  <!-- 指定检验失败后提示信息是否添加下面的前缀 -->
            <message>提示信息前缀</message>
        </field-validator>
    </field>
    
    <!-- 转换校验 -->
    <field name="字段名">
        <field-validator type="conversion" [short-circuit="true"]>
            <param name="repopulateField">true</param>  <!-- 转换失败后,返回输入页仍保留原来的错误输入 -->
            <message>错误提示信息</message>
        </field-validator>
    </field>
    
    <!-- 字符串长度校验 -->
    <field name="字段名">
        <field-validator type="stringlength" [short-circuit="true"]>
            <param name="minLength">最小值</param>
            <param name="maxLength">最大值</param>
            <param name="trim">默认为true</param>
            <message>错误提示信息</message>
        </field-validator>
    </field>
    
    <!-- 正则表达式校验 -->
    <field name="字段名">
        <field-validator type="regex" [short-circuit="true"]>
            <param name="expression">正则表达式</param>
            <param name="caseSensitive">默认为true</param>  <!-- 是否区分大小写 -->
            <message>错误提示信息</message>
        </field-validator>    
    </field>    

</validators>

 

【毕设进行时】Struts2的输入校验

标签:

原文地址:http://www.cnblogs.com/hippiebaby/p/4507436.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!