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

原创 2016年08月28日 18:07:11

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

第一种:

参考: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.x\lib\xwork-core-2.3.x.jar包中xwork-validator-1.0.x.dtd文件的描述。

3.4 该文件中validator的种类

参考:xwork-core-2.3.x.jar\com\opensymphony\xwork2\validator\validators中的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

结果如下:

版权声明:本文为博主原创文章,未经博主允许不得转载。

Struts2数据校验(2)--使用XWork检验框架实现校验

2.使用XWork检验框架实现校验 通过XWork的validator框架也可以进行Struts2的数据校验,使用XWork的validator框架实现数据校验,只需编写一个验证文件便可。 1.验...

Struts2使用XML实现Validation校验数据的两种方法

Struts2提供数据校验,且是配置式

Struts2验证框架的配置及validation.xml常用的验证规则

在Struts2中,它的每一个校验框架都对应着每一个Action,它的命名格式为:-validation.xml,其中-validation.xml是固定不变的,就是要验证的Action类的名字,并且...

Struts2验证框架的配置及validation.xml常用的验证规则

Struts2验证框架的配置及validation.xml常用的验证规则 validation.xml 的命名规则和放置路径: 文件名:-validation.xml 就是要验证的A...

Struts2验证框架的配置及validation.xml常用的验证规则

转载:http://blog.csdn.net/iuhiqnehc/article/details/8245767 在Struts2中,它的每一个校验框架都对应着每一个Action,它的命名...
  • dfwu5
  • dfwu5
  • 2013年04月14日 20:34
  • 358

Struts2验证框架的配置及Validation.Xml常用的验证规则

Struts2验证框架的配置及Validation.Xml常用的验证规则
  • VipMao
  • VipMao
  • 2016年04月20日 11:45
  • 2893

验证框架的配置及validation.xml常用的验证规则(Struts2的输入验证详解)

原文:http://www.blogjava.net/focusJ/archive/2010/11/15/367272.html validation.xml 的命名规则和放置路径: 文件名...

Struts2验证框架的配置及validation.xml常用的验证规则

validation.xml 的命名规则和放置路径: 文件名:-validation.xml 就是要验证的Action类的名字。要将此文件放于Class文件相同的目录。 如果在Action类在str...

Struts2之验证框架二(通过action类名-validation.xml方式)

1 index.jsp                        2action类 package org.action; import com.opensymphony.xwo...

Struts2教程5:使用Validation框架验证数据

在《Struts2教程4:使用validate方法验证数据》中曾讲到使用validate方法来验证客户端提交的数据,但如果使用validate方法就会将验证代码和正常的逻辑代码混在一起,但这样做并不利...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts2:数据校验,通过XWork校验框架实现(validation.xml)
举报原因:
原因补充:

(最多只允许输入30个字)