• 07-struts2提供的数据校验


    关于struts2提供的数据校验

    在开发中,请求参数是需要校验的。
    客户端校验---->js
    服务器校验---->java代码。

    struts2中提供的校验-----服务器端校验。

    分成两种:
    1.手动校验(编码校验)
    2.配置校验(annotation,xml) 我们讲的是xml。


    1.手动校验:(了解)


    要求:action类必须继承自ActionSupport。需要重写一个方法 validate

    通过测试发现在action中重写的validate方法执行了。并且是在请求处理方法(execute)之前执行的。

     

    1.action中

     

    package cn.itcast.action;
    
    import cn.itcast.domain.User;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class LoginAction extends ActionSupport implements ModelDriven<User> {
        private User user  = new User();
        //action类必须继承自ActionSupport。需要重写一个方法 validate
        @Override
        public void validate() {
            // TODO Auto-generated method stub
            if(user.getUsername() == null || user.getUsername().length()==0 || "".equals(user.getUsername())) {
                //存储校验错误信息
                
                this.addFieldError("username_error", "用户名不能为空");
            }
            
            
        }
    
        @Override
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            System.out.println("execute..");
            return "success";
        }
    
        @Override
        public User getModel() {
            // TODO Auto-generated method stub
            return user;
        }
    
    }

     

    2.jsp中页面上怎样获取错误信息

     

    <s:fielderror></s:fielderror>
        <form action="${pageContext.request.contextPath}/login" method="post">
            用户名:<input type="text" name="username"><br>
            密码<input type="password" name="password"><br>
            生日<input type="text" name="birthday"><br>
            <input type="submit" value="登录">
        </form>




    对于struts2提供的校验,它也是通过拦截器实现的。

    问题:在validate方法中怎样存储校验错误信息?

    在validate方法中 this.addFieldError(Sting name,String value);

    问题:在页面上怎样获取错误信息?(在input视图上)
    <s:fielderror> 展示所有错误信息

    <s:fielderror fieldName="">展示特定名称的错误信息.


    问题:在同一个Action中有多个请求处理方法(login,regist)那么有些方法是需要校验的,有些是不需要的,怎样处理?
    解决方案:创建一个名称叫 validate+请求处理方法名 例如:请求处理方法叫 regist() 校验 的方法名 validateRegist().


    2.配置校验(xml)


    struts2的校验框架。
    已经完成了校验操作(做了很多校验方法)。
    而我们在使用时,只需要将它们调用就可以(通过配置文件)

    要求:action类必须继承自ActionSupport。


    问题:配置文件怎样配置?

     

    • 位置:xml文件要与action类在同一个包下
    • 名称:action类名-validation.xml
    • 约束: xwork-core-2.3.7.jar 中 xwork-validator-1.0.3.dtd 下

    <!DOCTYPE validators PUBLIC
    "-//Apache Struts//XWork Validator 1.0.3//EN"
    "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

    • 书写:

    1.根元素
    <validators>
    2.子元素
    <field name="属性名称"></field>

    3.<field>子元素
    <field-validator type="校验器"> 这个是指定校验器
    问题:校验器有哪些?
    xwork-core-2.3.7.jar 中 /com/opensymphony/xwork2/validator/validators/default.xml下

    <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"/>



    4.<field-validator>子元素
    <message>错误信息</message>

    5.<field-validator>子元素
    <param name="">值</param>
    用于指定校验器中的参数.

     

    1.jsp中

                  

    <s:fielderror></s:fielderror>
        <form action="${pageContext.request.contextPath}/login" method="post">
            用户名:<input type="text" name="username"><br>
            密码<input type="password" name="password"><br>
            <input type="submit" value="登录">
        </form>

     

    2.配置的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="username">
            <field-validator type="requiredstring">
                <message>用户名不能为空</message>
            </field-validator>
            <field-validator type="stringlength">
                <param name="minLength">3</param>
                <param name="maxLength">8</param>
                <message>用户名只能在${minLength}到${maxLength}之间</message>
            </field-validator>
        </field>
    </validators>

     

    介绍:关于配置校验中的校验器:


    * required (必填校验器,要求被校验的属性值不能为null)
    * requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
    * stringlength (字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
    * regex (正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
    * int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
    * double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
    * fieldexpression (字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
    * email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)
    * url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)
    * date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)

    -------------------------------------------------------------------------------------------

     

    问题:通过配置校验,怎样处理在同一个action中存在多个请求处理方法校验问题?



    只需要将校验xml文件名称修改就可以。
    action类名-valication.xml 现在要对action类中某一个方法校验。

    action类名-action名称-validation.xml.

  • 相关阅读:
    有一天,我们能这样相爱吗?
    端午节来源六说
    一个ini类代替缓存使用
    创意生活可爱香皂
    漂亮的韩国发饰
    Oracle中PL/SQL单行函数和组函数详解
    真正爱你的女人是这样的
    执子之手,与子偕老。你同意么?
    男人如茶
    Oracle SQL 內置函數大全
  • 原文地址:https://www.cnblogs.com/1963942081zzx/p/6488718.html
Copyright © 2020-2023  润新知