Struts2的手动验证

struts2手动验证:
 * 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法
 
 * 要继承ActionSupport类或者实现Validateable接口
 
 * 重写Validateable接口的validate()方法
  * 前提是:要保证setUsername()、validate()、login()方法要按照这个先后顺序执行
 
 * 如果登录失败,如何处理:
  * this.addFieldError( key, value);
   * key:错误提示字段
   * value:错误提示信息
 
 * 什么时候才是验证通过?
  * 验证通过:1、map集合不存在;2、map集合存在并为空
  * 验证不通过:map集合存在并且不为空
 
 * 分析需求:
  * 用户名不能为null ,""
  * 密码不能为null, "" ,并且密码的长度6-12之间
 
 * 针对所有业务方法进行验证还是针对某个指定业务方法进行验证?
  * 重写的validate()方法,针对所有业务方法进行验证
  * 重写的validate()方法加上要验证的指定的业务方法名(业务方法名的首字母大写),实现针对某个指定的业务方法进行验证
   * 为什么要这样进行拼接?因为struts2框架底层拼接,如果不这样写,底层就找不到对应方法名

package cn.itcast.validate;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class ValidateAction extends ActionSupport {

private String username;
 
 private String psw;
 
 public void setUsername(String username) {
  System.out.println("ValidateAction ************ setUsername()");
  this.username = username;
 }
 
 /*
  * 验证方法:
  *  * 该动作类action必须继承ActionSupport或者实现Validateable接口
  *  * 必须重写Validateable接口提供的validate()方法
  *
  *  * 必须要保证setUsername()、validate()、login()方法的执行顺序如下:
  *   * setUsername()
  *   * validate()
  *   * login()
  *
  *  * 如果登录失败,如何处理:
  *   * this.addFieldError( key, value);
  *    * key:错误提示字段
  *    * value:错误提示信息
  *
  *  * 通过底层代码说明:
  *   public synchronized void addFieldError(String fieldName, String errorMessage) {
          final Map<String, List<String>> errors = internalGetFieldErrors();  //声明一个map集合
          List<String> thisFieldErrors = errors.get(fieldName);     //声明一个list集合,放入对应错误提示信息
  
          if (thisFieldErrors == null) {           //如果list集合为空
              thisFieldErrors = new ArrayList<String>();       //重新创建一个list集合
              errors.put(fieldName, thisFieldErrors);        //把list集合放入到map集合中
          }
  
          thisFieldErrors.add(errorMessage);          //把错误提示信息放入到list集合中
      }
  *
  *  * 什么时候才是验证通过?
  *   * 验证通过:1、map集合不存在;2、map集合存在并为空
  *   * 验证不通过:map集合存在并且不为空
  *
  *  * 分析需求:
  *   * 用户名不能为null ,""
    * 密码不能为null, "" ,并且密码的长度6-12之间
  *
  *  * 针对所有业务方法进行验证还是针对某个指定业务方法进行验证?
  *   * 重写的validate()方法,针对所有业务方法进行验证
  *   * 重写的validate()方法加上要验证的指定的业务方法名(业务方法名的首字母大写),实现针对某个指定的业务方法进行验证
  *    * 为什么要这样进行拼接?因为struts2框架底层拼接,如果不这样写,底层就找不到对应方法名
  *  
  */
 public void validateLogin() {
  System.out.println("ValidateAction ************ validate()");
  
  if(username==null||username.equals("")){
   this.addFieldError("error", "用户名不能为空!");
  }
  
  if(psw==null||psw.equals("")){
   this.addFieldError("error", "密码不能为空!");
  }else{
   
   String pattern = "^[0-9a-zA-Z]{6,12}$";
   
   Pattern p = Pattern.compile(pattern);
   
   Matcher m = p.matcher(psw);
   
   boolean b = m.matches();
   
   if(!b){
    this.addFieldError("error", "密码的长度必须在6至12之间!");
   }
   
  }
  
 }
 
 public String login(){
  System.out.println("ValidateAction ********* login()");
  
  System.out.println("username = "+username);
  
  System.out.println("password = "+psw);
  
  return "success";
 }
 
 public String test(){
  System.out.println("ValidateAction ********* test()");
  return "success";
 }

public String getUsername() {
  return username;
 }

public String getPsw() {
  return psw;
 }

public void setPsw(String psw) {
  this.psw = psw;
 }
 
}

时间: 2024-08-01 18:12:06

Struts2的手动验证的相关文章

struts2 validate手动验证

我们前面学习struts2知道,struts2通过拦截器实现了一些验证操作. 比如,如果是不能转换的类型在action中接受的话会跳转到错误页面,错误信息中会包含对应的错误信息,例如: 首先我们了解一下错误信息的显示. 在页面上,我们显示错误信息,使用的是<s:fielderror>标签. <s:fielderror>默认遍历所有的错误信息. 如果指定了fieldName属性,就打印的是指定filedName对应的错误信息. 如果手动添加错误信息?如何实现验证? 在ActionSu

struts2框架xml验证

struts2验证分为3步: 1.获取需要验证的信息,使用同名属性,提供getter,setter方法.然后框架使用反射将值自动注入. 2.对信息进行验证,成功失败作出对应的选择. xml验证和手动验证第一步都是一样的,第二步是使用xml配置文件完成的. 1.jsp前台页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ tagl

AngularJS实现表单手动验证和表单自动验证

AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证.一.手动验证 所谓手动验证是通过AngularJS表单的属性来验证.而成为AngularJS表单必须满足两个条件: 1.给form元素加上novalidate="novalidate": 2.给form元素加上name="theForm",如下: <!DOCTYPE html> <html lang="en" ng-app="myApp1"

12.如何自学Struts2发送邮件和验证补充[视频]

12.如何自学Struts2发送邮件和验证补充[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 有问题可以直接回复这篇文章.

AngularJS表单验证,手动验证或自动验证

AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证. 手动验证 所谓手动验证是通过AngularJS表单的属性来验证.而成为AngularJS表单必须满足两个条件:1.给form元素加上novalidate="novalidate":2.给form元素加上name="theForm",如下: <!DOCTYPE html> <html lang="en" ng-app="myApp1"&g

Struts2的输入验证(三)-短路验证与非字段验证

一.短路验证 若对一个字段使用多个验证器,默认情况下会执行所有的验证.若希望前面的验证器验证没有通过,后面的就不再验证,可以使用短路验证. 1)对同一个字段内的多个验证器,如果一个短路验证器验证失败,其他验证器不会继续校验 2)验证程序配置文件中<validator  …/> 元素和 <field-validator  …/> 元素可以指定一个可选的 short-circuit 属性,该属性指定该验证器是否是短验证器,默认值为 false. 1.示例:短路验证器 要求:为age字段

Struts2的输入验证(二)-声明式验证证框架的原理

一.Struts2 声明式验证原理解析 1.Struts2 默认的拦截器栈中提供了一个 validation 拦截器,validation 拦截器负责加载和执行已注册的验证程序. 其运行时序图如下: 2.每个具体的验证规则都会对应具体的一个验证器,有一个配置文件把验证规则名称和验证器关联起来了,而实际上执行验证的就是那个验证器.  该文件位于 com.opensymphony.xwork2.validator.validators 下的 default.xml. 如下图所示: 3.配置文件与验证

struts2 手动验证表单

struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>

Struts2 手动验证

* 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法        * 要继承ActionSupport类或者实现Validateable接口        * 重写Validateable接口的validate()方法        * 前提是:要保证setUsername().validate().login()方法要按照这个先后顺序执行        * 如果登录失败,如何处理:        * this.addFieldErro