zoukankan      html  css  js  c++  java
  • (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)

    转载自:http://www.cnblogs.com/nayitian/p/3475661.html

    struts2:数据校验,通过XWork校验框架实现(validation.xml)

     

    根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种。服务器端验证目前有两种方式:

    第一种:

    参考:struts2:数据校验,通过Action中的validate()方法实现校验,图解

    第二种:

    使用validate()方法校验时,如果Web应用中存在大量Action就需要多次重写validate()方法,这使得代码非常繁琐。由于Struts2的校验框架本质上是基于XWork的validato框架,因此可以使用XWork的validator框架来对Struts2进行数据校验,以减少代码量。本文即讨论此种校验方式。

    1. 前台页面加入错误提示标签(registerX.jsp)

    复制代码
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ page isELIgnored="false"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
        </head>
        <body>
            <s:fielderror/>
            <s:form action="registerX" method="post">
                账号:<s:textfield name="username"></s:textfield>
                <br/>
                密码:<s:password name="password"></s:password>
                <br/>
                重复密码:<s:password name="repassword"></s:password>
                <br/>
                年龄:<s:textfield name="age"></s:textfield>
                <br/>
                身高:<s:textfield name="height"></s:textfield>
                <br/>
                <s:submit value="提交"></s:submit>
                <br/>
            </s:form>
        </body>
    </html>
    复制代码

    2.  后台action继承ActionSupport(RegisterXAction.java)

    复制代码
    package com.clzhang.ssh.demo1;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class RegisterXAction extends ActionSupport {
        public static final long serialVersionUID = 1;
    
        private String username;
        private String password;
        private String repassword;
        private Integer age;
        private Double height;
    
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getRepassword() {
            return repassword;
        }
        public void setRepassword(String repassword) {
            this.repassword = repassword;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public Double getHeight() {
            return height;
        }
        public void setHeight(Double height) {
            this.height = height;
        }
    
        @Override
        public String execute() {
            System.out.println(username + "|" + age + "|" + height + " register finished!");
            
            return "register";
        }
    }
    复制代码

    3. 增加校验配置文件(RegisterXAction-validation.xml)

    3.1 命名规范

    校验文件命名规则:ActionName-validation.xml,其中ActionName就是需要校验的action的类名。

    如果需要在Action中对某个特定的方法进行校验,则需要为此特定方法专门定义一个校验文件(否则,调用默认的)。该文件命名规则为:actionNme-methodNae-validation.xml;同时,还需要在struts.xml文件配置action时指定其method属性(否则,调用默认的)。

    3.2 位置规范

    该文件应该与action类的文件位于同一个路径下。

    3.3 该文件的定义

    参考:struts-2.3.xlibxwork-core-2.3.x.jar包中xwork-validator-1.0.x.dtd文件的描述。

    3.4 该文件中validator的种类

    参考:xwork-core-2.3.x.jarcomopensymphonyxwork2validatorvalidators中的default.xml文件。

    3.5 进行数据校验遵循的步骤

    • Struts2框架中的类型转换器对HTTP请求的数据进行数据类型转换,得到符合类型的值,比如本例中age被转换为int。
    • 使用Struts2的XWork校验框架进行校验,即根据actionName-validation.xml文件和actionName-methodName-validation.xml文件校验数据。
    • 调用validateX()方法来进行数据校验。
    • 调用validate()方法进行数据校验。
    • 如果数据校验发生错误,就会返回名为input的result,进入指定的视图资源而不会调用本该被调用的业务逻辑处理方法。如果数据校验过程中未出现错误,则会调用相应Action中的业务逻辑处理方法。

    3.6 配置校验文件的方式

    Struts2框架提供了两种方式来配置校验文件,一种是字段校验配置方式;另一种是非字段校验配置方式。

    字段校验方式(field-validator)

    复制代码
    <!DOCTYPE validators PUBLIC
            "-//Apache Struts//XWork Validator 1.0.2//EN"
            "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
    <validators>
        <field name="username">
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message>请输入用户名</message>
            </field-validator>
            
            <field-validator type="stringlength">  
                <param name="minLength">2</param>
                <param name="maxLength">16</param>  
                <message>用户名长度在${minLength}到${maxLength}位之间!</message>  
            </field-validator>
        </field>
        
        <field name="password">
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message>请输入密码</message>
            </field-validator>
            
            <field-validator type="regex">  
                <param name="expression"><![CDATA[w{6,12}]]></param>  
                <message>密码必须在6-12位之间,且只能为字母和数字</message>  
            </field-validator>
        </field>
    
        <field name="repassword">
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message>请输入确认密码</message>
            </field-validator>
            
            <field-validator type="fieldexpression">  
                <param name="expression"><![CDATA[repassword==password]]></param>  <!--这里也可以用repassword.equals(password)//-->
                <message>两次密码不相等</message>  
            </field-validator>
        </field>
    
        <field name="age">
            <field-validator type="required">
                <param name="trim">true</param>
                <message>年龄不能为空!</message>
            </field-validator>
    
            <field-validator type="int">  
                <param name="min">1</param>
                <param name="max">60</param>  
                <message>年龄取值范围在${min}到${max}之间</message>  
            </field-validator>
        </field>
    
        <field name="height">
            <field-validator type="double">  
                <param name="min">1.10</param>
                <param name="max">2.10</param>  
                <message>身高取值范围在${min}到${max}米之间</message>  
            </field-validator>
        </field>
    </validators>
    复制代码

    非字段校验方式(non-fild validator),下面这个只是个示范,非本例所用。

     View Code

    3.7 校验器简介

    • required校验器,要求字段非空;
    • requiredstring校验器,要求字段值非空且长度大于0;
    • int校验器,表示整数,可以通过min/max参数指定范围;
    • date校验器,要求日期,可以通过min/max参数指定范围;
    • email校验器,要求电子邮件格式;
    • stringlength校验器,通过minLength/maxLength参数指定字段长度范围。

    4. 在struts.xml文件中配置错误返回页面地址

            <action name="registerX" class="com.clzhang.ssh.demo1.RegisterXAction">
                <result name="register">/ssh/demo1/success.jsp</result>
                <result name="input">/ssh/demo1/registerX.jsp</result>
            </action>

    5. 测试

    打开IE,输入地址:http://127.0.0.1:8080/st/ssh/demo1/registerX.jsp

    结果如下:

    直接提交,结果如下:

  • 相关阅读:
    BZOJ4416 [Shoi2013]阶乘字符串 【序列自动机 + 状压dp】
    BZOJ2159 Crash 的文明世界 【第二类斯特林数 + 树形dp】
    快速求原根
    BZOJ2530 [Poi2011]Party 【贪心】
    BZOJ2213 [Poi2011]Difference 【乱搞】
    BZOJ2276 [Poi2011]Temperature 【单调队列】
    多项式除法
    loj2538 「PKUWC2018」Slay the Spire 【dp】
    loj2537 「PKUWC2018」Minimax 【概率 + 线段树合并】
    Java多线程之线程的暂停
  • 原文地址:https://www.cnblogs.com/POLzj/p/6049461.html
Copyright © 2011-2022 走看看