`
szqfsx123
  • 浏览: 43755 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Struts2验证框架

 
阅读更多

Action配置中一定要设置input返回页面

添加验证只要创建验证的xml文件

1.创建xml文件名

验证Action中全部方法

在Action同包下,创建:Action类名-validation.xml
如:ValidateAction创建ValidateAction-validation.xml

验证Action中单个方法

<!-- 每个方法单独配置一个Action -->
<!-- 在Action同包下,创建:Action类名-action方法配置名称-validation.xml -->
<action name="validateAdd" class="com.struts2.validator.ValidateAction" method="add">
<!-- 要创建ValidateAction-validateAdd-validation.xml -->

<!-- 使用通配符配置 -->
<!-- 在Action同包下,创建:Action类名-action方法对应的名称-validation.xml -->
<action name="validate_*" class="com.struts2.validator.ValidateAction" method="{1}">
<!-- 要创建ValidateAction-validate_add-validation.xml,validate_add为访问这个action方法的路径 -->
 

注意事项

注意:
1.要验证的方法不能叫input.
2.这样配置在form表单中要在<s:form action="validate_add">中action写好名称,
不能写action="validate_",然后<s:submit value="提交"method="add" /> 
这样会找不到对应的配置文件,跳过验证.
3.如果验证出错,返回input页面时,那些存在ValueStack中的值会丢失,可以将Action实现Preparable接口,
然后prepare()方法里初始化添加页面需要的值.
4.如果使用Preparable接口,必须在action配置中添加<interceptor-ref name="paramsPrepareParamsStack" />.
这样prepare()才能得到form提交的参数. 

2.创建xml内容

<!DOCTYPE validators PUBLIC  "-//OpenSymphony Group//XWork Validator 1.0.2//EN"  "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators> 
        <!-- 要验证的字段名称 -->
        <!-- 要验证Action中UserBean的id字段,name="userBean.id"(userBean为Action中的变量名) -->
    <field name="mail">
        <!-- type要验证的类型,short-circuit(默认false),true含义,如果当前验证失败了,下面的验证就不执行了.如requiredstring失败了,email就不验证了. -->
        <!-- field-validator下面可以有多个param元素,但是最多只能有一个message -->
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>Please enter a mail</message>
        </field-validator>
        <field-validator type="email">
                <message>
                        Invalid MAIL
                </message>
        </field-validator>
    </field>
</validators>
 

Struts内建验证程序(type的值)

required

保证字段的值不是空值null.空字符串不是空值null

<field name="userName">
    <field-validator type="required">
        <message>Please enter a user name</message>
    </field-validator>
</field>

 

requiredstring

保证字段不是空值null,也不是空白(empty).
param:trim(boolean) ->true->去除前后空格

<field name="userName">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>Please enter a user name</message>
    </field-validator>
</field>
<field name="password">
    <field-validator type="requiredstring">
        <param name="trim">false</param>
        <message>Please enter a password</message>
    </field-validator>
</field>

 

int

验证字段值是否可以转换为一个整数.
param: min(int);max(int)

 

 <field name="yeaar">
        <field-validator type="int">
            <param name="min">1999</param>
             <param name="max">2010</param>
            <message>year:1999-2010</message>
        </field-validator>
</field>
 

date

验证给定日期字段的值是否在一个给定的范围内.
param:max(date);min(date)

<field name="borthday">
        <field-validator type="int">
            <!-- 格式取决于当前地理时区 -->
            <param name="min">1999-01-01</param>
             <param name="max">2010-01-01</param>
            <message>birthday:1999-2010</message>
        </field-validator>
</field>

 

email

给定的String值是否是一个电子邮件地址

<field name="email">
    <field-validator type="email">
        <message>Invalid email</message>
    </field-validator>
</field>
 

url

给定的String值是否是一个合法的URL(要有前缀)

<field name="url">
    <field-validator type="url">
        <message>Invalid URL</message>
    </field-validator>
</field>

 

expression,fieldexpression

验证给定字段是否满足一个OGNL表达式.
区别:expression 不是一个字段验证程序,失败时将生成一个动作错误.(JSP中调用

<actionerror>

</actionerror>

才显示出错信息)
fieldexpression 是一个字段验证程序,失败时将抛出一个字段错误.(对字段验证)
param:expression(String)OGNL表达式

expression:

 

public class ExpressionTestAction {
        //属性生成get,set
    private int min;
    private int max;
}
<validator type="expression">
    <param name="expression">
        max > min
    </param>
    <message>
        Maximum temperature must be greater than Minimum temperature
    </message>
</validator>

<!-- jsp -->
<s:actionerror/>

 fieldexpression:

public class FieldExpressionTestAction {
        //属性生成get,set
    private int min;
    private int max;
}
<!-- 对字段验证 -->
<field name="max">
    <field-validator type="fieldexpression">
        <param name="expression">
            max > min
        </param>
        <message>
            Maximum temperature must be greater than Minimum temperature
        </message>
    </field-validator>
</field>
 

visitor

把同一个验证程序配置文件用于多个动作(对一个Bean写验证文件,每个使用的Action只要引用)

//UserBean
public class UserBean {
        //属性get,set
        private String name;
        private int age;
}

//UserBean-validation.xml(和UserBean放在同一个包中)
<field name="name">
    <field-validator type="requiredstring">
        <message>用户名必须</message>
    </field-validator>
</field>
<field name="age">
    <field-validator type="int">
        <param name="min">18</param>
        <param name="max">99</param>
        <message>Age must be between 18 and 99</message>
    </field-validator>
</field>

//Action的validation.xml
<!-- userBean变量名 -->
<field name="userBean">
    <field-validator type="visitor">
        <!-- message会和UserBean验证中的message一起显示 -->
        <message>用户: </message>
    </field-validator>
</field>

 如果另一个Action对UserBean使用另一个标准的验证,可以创建新的验证文件

//UserBean-specific-validation.xml
<!-- 和之前的验证不同 -->
<field name="age">
    <field-validator type="int">
        <param name="min">30</param>
        <param name="max">50</param>
        <message>Age must be between 30 and 50</message>
    </field-validator>
</field>
//另一个Action的validation.xml
<field name="userBean">
    <field-validator type="visitor">
        <!-- xml中扩展的名字,执行UserBean-specific-validation.xml的验证 -->
        <param name="context">specific</param>
        <message>用户1: </message>
    </field-validator>
</field>
 

conversion

检查对某个属性进行类型转换是否会导致一个转换错误

<field name="age">
    <field-validator type="conversion">
        <message>
            An age must be an integer.
        </message>
    </field-validator>
</field>
 

stringlength

验证一个非空的字段值是不是足够的长度
param:minLength(int);maxLength(int);trim(boolean)

<field name="password">
        <field-validator type="requiredstring">
            <param name="minLength">6</param>
             <param name="maxLength">14</param>
            <message>length:6-14</message>
        </field-validator>
</field>
 

regex

给定的值是否与一个给定的正则表达式匹配
param:expression(String)正则表达式;caseSensitive(boolean)是否区别大小写,默认为true;trim(boolean)是否去除前后空格

<field name="phone">
    <field-validator type="regex">
        <param name="expression">
            <![CDATA[\d\d\d\-\d\d\d\-\d\d\d\d]]>
        </param>
        <message>
            Invalid phone number or invalid format
        </message>
    </field-validator>
</field>
 

3.在action中验证

利用Validateable接口实现验证,实现void validate()方法.
ActionSupport类已经实现了这个接口

//继承ActionSupport
public class User extends ActionSupport {
    //属性get,set
    private String userName;
    private String password;
    private static List<String> userNames = new ArrayList<String>();
    static {
        userNames.add("harry");
        userNames.add("sally");
    }
    //验证方法
    public void validate() {
        if (userNames.contains(userName)) {
                        //添加出错信息
            addFieldError("userName",  "'" + userName + "' has been taken.");
        }
    }
}
 

4.自定义验证类

要创建一个普通的验证程序(非字段验证程序),扩展ValidatorSupport类.验证失败要从validate方法调用addActionError方法.
要创建一个字段验证程序,扩展FieldValidatorSupport类.验证失败要从validate方法调用addFieldError方法.
如果要能接受参数,要在类中定义一个相应的属性,并生成get,set.

编写类

public class StrongPasswordValidator extends FieldValidatorSupport {
        //属性
    private int minLength = -1;
    public void setMinLength(int minLength) {
        this.minLength = minLength;
    }
    public int getMinLength() {
        return minLength;
    }
        //验证方法
    public void validate(Object object) throws ValidationException {
        String fieldName = getFieldName();
        String value = (String) getFieldValue(fieldName, object);
        if (value == null || value.length() <= 0) {
            // use a required validator for these
            return;
        }
        if ((minLength > -1) && (value.length() < minLength)) {
            addFieldError(fieldName, object);
        } else if (!isPasswordStrong(value)) {
            addFieldError(fieldName, object);
        }
    }
    
    private static final String GROUP_1 = "abcdefghijklmnopqrstuvwxyz";
    private static final String GROUP_2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String GROUP_3 = "0123456789";
    protected boolean isPasswordStrong(String password) {
        boolean ok1 = false;
        boolean ok2 = false;
        boolean ok3 = false;
        int length = password.length();
        for (int i = 0; i < length; i++) {
            if (ok1 && ok2 && ok3) {
                break;
            }
            String character = password.substring(i, i + 1);
            System.out.println("character:" + character);
            if (GROUP_1.contains(character)) {
                ok1 = true;
                continue;
            }
            if (GROUP_2.contains(character)) {
                ok2 = true;
                continue;
            }
            if (GROUP_3.contains(character)) {
                ok3 = true;
            }
        }
        return (ok1 && ok2 && ok3);
    }    
}
 

注册xml

在src下创建validators.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC  "-//OpenSymphony Group//XWork Validator Config 1.0//EN"  "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">

<validators>
        <!-- 名称(type对应值),类路径 -->
    <validator name="strongpassword"  class="com.validator.StrongPasswordValidator"/>
</validators>
 

使用验证

<field name="password">
    <field-validator type="strongpassword">
        <param name="minLength">8</param>
        <message>
            Password must be at least 8 characters long
            and contains at least one lower case character,
            one upper case character, and a digit.
        </message>
    </field-validator>
</field>
分享到:
评论

相关推荐

    struts2验证框架

    Struts2 验证框架详解 Struts2 验证框架是基于 Java 语言的 Web 应用程序框架,提供了一个强大的验证机制,以确保用户输入的数据满足业务逻辑的要求。在 Struts2 中,验证机制是通过 validator 来实现的,该机制...

    struts2验证框架示例

    这个“struts2验证框架示例”提供了深入理解并实际操作Struts2验证功能的机会。 首先,让我们了解一下Struts2验证框架的基本概念。验证框架基于两个主要组件:Validation拦截器和Action类中的验证配置。Validation...

    struts2验证框架简单示例

    在Struts2中,验证框架是处理用户输入验证的关键部分,它确保了从客户端接收到的数据的质量和准确性。本示例将深入探讨Struts2验证框架的基本用法,特别适合初学者理解和掌握。 ### 一、Struts2验证框架概述 ...

    struts2验证框架简单实例

    在Struts2框架中,验证框架是其一个重要组成部分,用于确保输入数据的准确性和完整性,从而防止因无效数据导致的程序异常或错误。本实例将带你深入理解Struts2验证框架的使用,以及在实际操作中可能遇到的问题和解决...

    struts2 验证框架

    Struts2验证框架是Java开发中的一个关键组件,主要用于处理Web应用中的用户输入验证。它提供了灵活且强大的机制,确保用户提交的数据符合预期格式和业务规则。Struts2的验证框架是基于Action类和XML配置文件的,可以...

    Struts2 验证框架

    验证框架是Struts2中的一个重要组成部分,用于处理用户输入的数据验证。在这个框架中,验证逻辑与业务逻辑分离,使得代码更易于管理和扩展。 在Struts2验证框架中,主要有两种验证方式:客户端验证和服务器端验证。...

    struts2验证框架参数

    在深入探讨Struts2验证框架参数之前,我们首先简要回顾一下Struts2框架本身。Struts2是基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它提供了一种灵活的方式来构建可扩展的企业级Web应用程序。...

    struts2验证框架的使用和扩展

    在Struts2中,验证框架是其核心特性之一,它负责确保用户输入的数据符合预定义的规则,从而保证数据的准确性和安全性。本文将深入探讨Struts2验证框架的使用和扩展。 1. **Struts2验证框架基础** - **Action与...

    struts7验证框架 struts7验证框架

    Struts7验证框架是用于Java Web开发中的一个关键组件,主要负责处理用户输入数据的验证。这个框架在学习和实际项目开发中具有广泛的应用,因为它能够有效地提高代码的可维护性和减少开发工作量。 传统的Struts框架...

    struts2 -2.3.15.3-验证框架简单实现mode

    在Struts2的2.3.15.3版本中,集成的验证框架是其核心功能之一,帮助开发者确保用户输入的数据质量和安全性。本篇将详细讲解如何在Struts2中实现一个简单的验证框架模式。 首先,我们需要了解Struts2验证框架的基本...

    Struts2极速表单验证框架(注解)

    本篇将详细介绍Struts2的极速表单验证框架,特别是其注解方式的使用。 ### 1. 表单验证的重要性 在Web应用程序中,验证用户输入的数据是必不可少的,因为不正确的数据可能导致业务逻辑错误,甚至安全漏洞。Struts2...

    struts2最全验证框架

    ### Struts2 最全验证框架知识点详解 #### 一、Struts2 验证框架概述 Struts2 是一个基于MVC模式的Java Web开发框架,它提供了丰富的功能来简化Web应用的开发过程。其中,Struts2的验证框架是其重要的组成部分之一...

    struts2简单验证框架

    用户名、密码、年龄、电话号、email、日期验证、合法链接 的验证例子。

    Struts验证框架配置详解

    首先,Struts验证框架的配置涉及到两个关键的JAR包:`struts2-core.jar` 和 `struts2-validation-plugin.jar`。`struts2-core.jar` 是Struts2框架的核心库,包含了Struts2的基础功能;而`struts2-validation-plugin....

    struts1验证框架相当好的经典例子

    在Struts1中,验证框架是处理用户输入数据校验的重要组成部分,它帮助开发者确保用户提交的数据符合预定义的规则,从而提高应用程序的安全性和用户体验。下面将详细介绍Struts1验证框架的使用。 首先,我们来看一下...

    Struts2中使用验证框架的简单例子

    在Struts2中,验证框架是处理用户输入数据的有效性和完整性的关键组件。本篇文章将深入探讨如何在Struts2中使用验证框架,并通过一个简单的例子来演示其工作原理。 ### 一、Struts2验证框架概述 Struts2的验证框架...

    struts2验证文档

    #### 三、Struts2验证框架概述 Struts2框架内置了一套强大的验证系统,它基于WebWork验证框架进行扩展和优化。该验证系统支持前端和后端验证,并且可以通过XML配置文件或注解的方式定义验证规则。下面将具体介绍如何...

Global site tag (gtag.js) - Google Analytics