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

yizhihongxing

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

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 Boot 快速入门指南

    下面是关于 Spring Boot 快速入门指南的攻略: 概述 Spring Boot 是基于 Spring 框架的快速开发框架,通过自动装配和约定俗成的配置,可以快速搭建一个简单的 Java 应用。本文将介绍如何使用 Spring Boot 快速入门。 安装与配置 安装 Java 开发环境(JDK),最好使用 JDK 8 或以上版本。同时,也需要安装一个 …

    Java 2023年5月15日
    00
  • javax.validation自定义日期范围校验注解操作

    关于“javax.validation自定义日期范围校验注解操作”的完整攻略,我将从以下三个方面进行详细讲解: 什么是javax.validation自定义注解? 如何实现自定义日期范围校验注解? 示例演示 1. 什么是javax.validation自定义注解? javax.validation是Java中的一种验证框架,它提供了各种验证约束注解,包括@N…

    Java 2023年5月20日
    00
  • Java如何获取JSON中某个对象的值

    获取JSON中某个对象的值最常用的方式是通过Java的JSON库将JSON字符串转换成Java中的对象,然后通过对象属性的方式获取需要的值。下面是获取JSON中某个对象的值的完整攻略以及两条示例说明: 步骤一:导入依赖 首先需要导入相关的依赖,本文使用的是Gson库,可以在项目中添加以下依赖: <dependency> <groupId&g…

    Java 2023年5月26日
    00
  • 解决java转义json出现\u0000 等乱码的问题

    解决Java转义JSON出现乱码的问题,在于正确地处理JSON字符串的Unicode字符编码方式和转义符。 问题分析 当我们使用Java将一个对象转化为JSON字符串时,如果对象中包含了Unicode字符,经过转义后在JSON字符串中就会出现”\uXXXX”的形式,其中XXXX是Unicode字符的十六进制编码。 然而,在有些情况下,这种转义是会导致乱码的。…

    Java 2023年5月20日
    00
  • 浅谈Java8新特性Predicate接口

    浅谈Java8新特性Predicate接口 Java 8中新增加了Predicate接口,它定义了一个输入参数和返回值都为Boolean的函数。这个接口定义了许多实用的方法,可以被用来组合复杂的布尔逻辑。 Predicate接口定义 Predicate接口有一个test方法,返回一个Boolean类型,其定义如下: @FunctionalInterface …

    Java 2023年5月26日
    00
  • JSP由浅入深(5)—— Scriptlets和HTML的混合

    下面我将为你详细讲解“JSP由浅入深(5)—— Scriptlets和HTML的混合”的完整攻略,包含以下内容: Scriptlets的概念及使用 在Scriptlets中使用Java代码 Scriptlets中的变量声明与使用 Scriptlets与HTML的混合使用 示例说明 1. Scriptlets的概念及使用 Scriptlets是JSP中的一种脚…

    Java 2023年6月15日
    00
  • jsp session.setAttribute()和session.getAttribute()用法案例详解

    下面是“jsp session.setAttribute()和session.getAttribute()用法案例详解”的完整攻略。 什么是Session? Session是指浏览器和服务器之间维护的一个会话状态,用于保存用户信息、用户访问状态等。在JSP中我们可以使用session对象来操作session。 session.setAttribute() s…

    Java 2023年6月15日
    00
  • spring设置拦截器代码实例

    下面我将为你详细讲解”Spring设置拦截器代码实例”的完整攻略,包括以下内容: 什么是拦截器 Spring中的拦截器 设置Spring拦截器的步骤 两个代码示例 1. 什么是拦截器 拦截器(Interceptor)是一种AOP(面向切面编程)思想的应用,它是用来处理请求的,类似于Servlet中的过滤器(Filter)。拦截器可以在一个请求时的preHan…

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