Struts2学习笔记(6)-简单的数据校验

针对这个话题,下面是一份完整攻略。

Struts2学习笔记(6)-简单的数据校验

前言

在Struts2中,数据校验是开发过程中不可缺少的一部分,而Struts2提供了全面而且灵活的校验机制来实现数据校验。在这篇文章中,我们将介绍Struts2中简单的数据校验。

配置数据校验

Struts2的校验机制主要是通过在Action类中定义方法进行校验,校验方法必须在Action类中具有如下的特点:

  1. 公有方法,且没有参数
  2. 方法名称为validate+属性名,例如:validateName()、validateAge(),其中属性名一般对应Action中的属性

校验方法的返回值为void,在校验失败的情况下,需要将错误信息添加到Action类中的一个Map<String, List<String>>类型的成员变量fieldErrors中。

在Struts2中,校验方法的配置也很简单,只需要在struts.xml文件中对需要进行校验的Action类进行配置即可。

例如,我们在struts.xml中对UserAction类的username属性进行校验,配置如下:

<action name="userAction" class="com.example.UserAction">
  <result name="success">/user.jsp</result>
  <result name="input">/login.jsp</result>
  <interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">execute,input</param>
  </interceptor-ref>
  <field name="username">
    <field-validator type="requiredstring">
      <message>用户名不能为空!</message>
    </field-validator>
    <field-validator type="stringlength">
      <param name="minLength">6</param>
      <message>用户名至少要6个字符!</message>
    </field-validator>
  </field>
</action>

在上面的配置中,username属性通过两种不同的方法进行校验,一次是使用了requiredstring验证器,另一次是使用了stringlength验证器。

编写校验方法

在Action类中,我们需要为需要进行数据校验的属性编写校验方法。例如,我们在UserAction类中需要对username属性进行校验,那么我们需要编写一个名为validateUsername的方法。

public void validateUserName(){
    String userName = getUser().getUserName();
    if(StringUtils.isEmpty(userName)){
        addFieldError("user.userName", "用户名不能为空");
    } else if(userName.length() < 6) {
        addFieldError("user.username", "用户名长度必须大于等于6");
    }
}

在上面的代码中,我们先判断了userName是否为空,如果为空,则调用addFieldError方法将错误信息添加到fieldErrors成员变量中。在addFieldError方法中,第一个参数是错误信息的属性名称,该名称必须使用形如<namespace>.<property>的完全限定名,其中<namespace>是Action类中的namespace,如果省略则默认为"",而<property>则是需要进行校验的属性名。第二个参数则是错误信息的具体内容。

示例一:验证邮箱地址格式

首先,我们需要编写一个User类表示用户信息,其中包含了一个email属性。通过Struts2框架的数据校验机制,实现对用户邮箱地址的格式合法性校验。

  1. User类中添加email属性。

    java
    private String email;

  2. 编写校验方法。

    java
    public void validateEmail(){
    if(StringUtils.isEmpty(getEmail())){
    addFieldError("user.email", "邮箱不能为空");
    return;
    }
    if(!Pattern.matches("^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-\\.)?)+[a-z0-9A-Z]+\\.([a-zA-Z]{2,4})$", getEmail())){
    addFieldError("user.email", "邮箱格式错误,请输入正确的邮箱地址");
    }
    }

    在上述代码中,我们使用了StringUtils类和Java的正则表达式来判断邮箱地址是否合法。如果邮箱地址为空,则直接将错误信息添加到fieldErrors成员变量中,否则使用正则表达式进行格式校验,如果不匹配则同样将错误信息添加到fieldErrors成员变量中。

  3. 在Struts2的struts.xml文件中对UserAction类进行校验配置。

    xml
    <action name="validateEmailAction" class="com.example.UserAction">
    <result name="success">/user.jsp</result>
    <result name="input">/login.jsp</result>
    <interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">execute,input</param>
    </interceptor-ref>
    <field name="email">
    <field-validator type="email">
    <message>邮箱格式错误,请输入正确的邮箱地址</message>
    </field-validator>
    </field>
    </action>

    在上述代码中,我们使用了email类型的验证器来校验email属性的格式。如果不符合邮箱地址的基本格式,则返回错误信息。

  4. 在JSP页面中添加邮箱地址输入框。

    html
    <s:form action="validateEmailAction">
    <s:textfield label="邮箱地址" name="user.email" />
    <s:submit />
    </s:form>

    在上述代码中,我们使用了<s:textfield>标签来创建一个邮箱地址的输入框,并指定了该输入框对应的属性名称为user.email

示例二:校验密码和确认密码是否一致

制作一个修改个人密码的页面,并对其进行校验,校验密码和确认密码是否一致。

  1. User类中添加passwordconfirmPassword属性。

    java
    private String password;
    private String confirmPassword;

  2. 编辑校验方法。

    java
    public void validateUpdatePassword(){
    if(StringUtils.isEmpty(getPassword())){
    addFieldError("user.password", "密码不能为空");
    }
    if(StringUtils.isEmpty(getConfirmPassword())){
    addFieldError("user.confirmPassword", "确认密码不能为空");
    }
    if(!getPassword().equals(getConfirmPassword())){
    addFieldError("user.confirmPassword", "两次输入的密码必须相同");
    }
    }

    在上述代码中,我们分别判断了密码和确认密码是否为空,以及两者是否相同。如果不符合条件,则将错误信息添加到fieldErrors成员变量中。

  3. 在Struts2的struts.xml文件中对UserAction类进行校验配置。

    xml
    <action name="updatePasswordAction" class="com.example.UserAction">
    <result name="success">/success.jsp</result>
    <result name="input">/updatePassword.jsp</result>
    <interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">execute,input</param>
    </interceptor-ref>
    <field name="password">
    <field-validator type="requiredstring">
    <param name="trim">true</param>
    <message>密码不能为空</message>
    </field-validator>
    </field>
    <field name="confirmPassword">
    <field-validator type="requiredstring">
    <param name="trim">true</param>
    <message>确认密码不能为空</message>
    </field-validator>
    </field>
    </action>

    在上述代码中,我们对passwordconfirmPassword属性分别使用了requiredstring验证器进行校验。通过设置trim参数为true,可以自动将输入框中的前后空格去除。

  4. 在JSP页面中添加两个密码输入框。

    html
    <s:form action="updatePasswordAction">
    <s:password label="新密码" name="user.password" />
    <s:password label="确认密码" name="user.confirmPassword" />
    <s:submit />
    </s:form>

在完成上述步骤之后,我们就可以测试上述的两个示例代码了。在测试过程中,我们可以尝试输入不同的数据,验证数据校验机制的正确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2学习笔记(6)-简单的数据校验 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 启动Spring项目详细过程(小结)

    启动Spring项目详细过程 启动一个Spring项目可以分为以下几个步骤: 1. 创建项目 在IDE中创建一个新的Spring项目,可以选择使用Spring Initializr或手动创建。 使用Spring Initializr Spring Initializr是一个Web UI,可以用来方便地创建Spring项目。 打开Spring Initiali…

    Java 2023年5月19日
    00
  • 最全Java面试208题,涵盖大厂必考范围

    最全Java面试208题攻略 简介 Java作为一门广泛应用的编程语言,是许多公司招聘的必备技能,也是很多程序员的选择。针对Java面试,现有一份较全的面试题目列表,本攻略将结合这些问题提供完整的解答。 策略 首先,将Java面试题目逐一分析,深入理解问题本质及出题人意图,思考面试官可能会对于这些问题提出哪些追问,以及我们该如何回答。 其次,可通过企业面试官…

    Java 2023年5月24日
    00
  • 什么是JVM参数?

    JVM参数是用于控制JVM行为的命令行参数。JVM参数可以分为两大类:标准参数和非标准参数。 标准参数 标准参数指的是JVM规范中定义的参数,它们可以在所有的JVM实现中使用。以下是一些常见的标准参数。 -Xmx 用于设置JVM最大可用内存大小。例如,以下命令行将JVM最大内存设置为2G: java -Xmx2g MyApp -Xms 用于设置JVM初始内存…

    Java 2023年5月10日
    00
  • spring boot RestTemplate 发送get请求的踩坑及解决

    关于“spring boot RestTemplate 发送get请求的踩坑及解决”的完整攻略,我将分为以下几个部分逐一进行讲解: 介绍RestTemplate发送get请求的基本用法 分析在发送get请求时可能遇到的踩坑 解决get请求中可能遇到的问题 最后,提供至少两个示例说明。 1. RestTemplate发送get请求的基本用法 RestTempl…

    Java 2023年5月26日
    00
  • Javaweb会话跟踪技术Cookie和Session的具体使用

    Javaweb会话跟踪技术是指通过记录客户端与服务器之间的交互状态来维持一个连续的会话过程。其中常用的两种技术是Cookie和Session,下面将详细讲解它们的具体使用方法。 Cookie 什么是Cookie Cookie 是一个小文本文件,由服务器端发送给客户端,客户端将 Cookie 保存在本地并发送到服务器端。Cookie 经常被用来记录与服务器之间…

    Java 2023年5月26日
    00
  • java8 stream 如何打印数据元素

    Java8 Stream 如何打印数据元素? Java8 中引入了 Stream API,它是用于描述对基于元素序列的一个或多个操作的流式计算的 API。使用 Stream API,可以以声明性的方式处理数据元素,而不是命令式的方式,这样可以极大地提高代码的可读性和表达性。 在 Java8 Stream 中,打印流中的所有元素通常是我们进行调试的一项重要操作…

    Java 2023年5月26日
    00
  • Java 数据结构与算法系列精讲之数组

    Java 数据结构与算法系列精讲之数组 数组的定义和基本操作 数组是一种线性数据结构,它由一系列相同类型的元素组成,这些元素在内存中连续存储。 定义 在Java中定义数组需要指定数据类型和数组长度,例如: int[] arr = new int[10]; // 定义一个长度为10的整型数组 基本操作 数组的基本操作包括了以下几个方面: 初始化:默认初始化为类…

    Java 2023年5月19日
    00
  • 使用struts2+Ajax+jquery验证用户名是否已被注册

    下面我将详细讲解如何使用struts2+Ajax+jquery验证用户名是否已被注册的完整攻略: 1. 准备工作 首先需要准备以下工具和环境: struts2-web框架:用于接收和处理请求,在返回结果时可以返回json字符串。 jquery:用于发送Ajax请求。 验证用户名是否已被注册的代码功能。 2. 编写struts.xml配置文件 首先需要在str…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部