struts2 validate手动验证

我们前面学习struts2知道,struts2通过拦截器实现了一些验证操作。

比如,如果是不能转换的类型在action中接受的话会跳转到错误页面,错误信息中会包含对应的错误信息,例如:

首先我们了解一下错误信息的显示。

在页面上,我们显示错误信息,使用的是<s:fielderror>标签。

<s:fielderror>默认遍历所有的错误信息。

如果指定了fieldName属性,就打印的是指定filedName对应的错误信息。

如果手动添加错误信息?如何实现验证?

  在ActionSupport类中,实现了Validateable接口,我们可以重写validate方法或者validateXXX方法达到验证的目的:

struts2如果判断验证通过与否?

  struts2中的错误信息使用的是errors集合存储。

  底层源码: 

  public synchronized void addFieldError(String fieldName, String errorMessage) {
        final Map<String, List<String>> errors = internalGetFieldErrors();
        List<String> thisFieldErrors = errors.get(fieldName);

        if (thisFieldErrors == null) {
            thisFieldErrors = new ArrayList<String>();
            errors.put(fieldName, thisFieldErrors);
        }

        thisFieldErrors.add(errorMessage);
    }

  如果errors集合为null,或者errors.size()==0,表示验证通过。fieldError这个list集合存储错误提示信息,map集合存储字段名和对应的错误信息对应的集合

我们如果验证失败,处理方式:在validate方法或者validateXXX方法使用addFieldError方法添加错误,只有有错误就会跳到错误页面

this.addFieldError(key,value)
value:错误提示信息
 key:错误提示字段

例子:

  

    public void validateLogin() {
        System.out.println("Validate ********* validate");

        /*
         * 用户名不能为空
         */

        if(username==null || username.trim().isEmpty()){
            this.addFieldError("username","用户名不能为空");
        }
        if(psw==null || psw.trim().isEmpty()){
            this.addFieldError("psw","密码不能为空");
        }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("psw","密码的长度必须在6~12之间");
            }
        }

    }

这里要注意一点:

  如果重写validate方法,表示该action内的所有功能都要走验证方法,如果只是要验证单个方法,新建方法validate+要验证的执行方法名(该方法名首字母大写),或者validateDo+要验证的执行方法名(该方法名首字母大写)

因为fielderror是一个map集合,所以我们应该要理解<s:fielderror>标签了。我的前端页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP ‘login.jsp‘ starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <style type="text/css">
    li{
        list-style:none;
        color:red;
    }

    </style>

  </head>

  <body>

    <s:form name="loginForm" method="post" namespac="/validate" action="validateAction_login" theme="simple">
        <table border="1">
            <tr>
                <td>用户名</td>
                <td><s:textfield name="username" /></td>
                <td><s:fielderror fieldName="username" /></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><s:password name="psw" /></td>
                <td><s:fielderror fieldName="psw" /></td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><s:submit value="登录"/></td>
                <td></td>
            </tr>
        </table>
    </s:form>
    <br/>

    <a href="${pageContext.request.contextPath }/validate/validateAction_test.do">test其他的方法</a>
  </body>
</html>

  

时间: 2024-10-13 16:33:13

struts2 validate手动验证的相关文章

Struts2的手动验证

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

struts2框架xml验证

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

Struts2之输入验证

摘要:Struts2提供了安全的服务器验证方法,使用action中的validate方法即可 下面将展现简单的输入验证怎么写 1,表单index.jsp代码如下: 1 <%@ page language="java" import="java.util.*" pageEncoding="GBK" contentType="text/html; charset=GBK"%> 2 <%@ taglib uri=&

Struts2 Validate

1.自定义action继承ActionSupport 2.复写validate方法,因为ActionSupport实现了Validate这个借口,而这个借口中定义了validate方法 3.当请求时,先执行validate这个方法,然后再执行自己请求的方法 添加:<%@ taglib uri="/struts-tags" prefix="s" %>     引入struts2标签库 请求url <s:form action="valida

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

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

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 有问题可以直接回复这篇文章.

【Javascript】jQuery Validate扩展验证方法

/*****************************************************************jQuery Validate扩展验证方法*****************************************************************/// 判断整数value是否等于0 jQuery.validator.addMethod("isIntEqZero", function (value, element) { valu

jQuery Validate扩展验证方法

/***************************************************************** jQuery Validate扩展验证方法 (linjq) *****************************************************************/ $(function(){ // 判断整数value是否等于0 jQuery.validator.addMethod("isIntEqZero", functio