首页 > 代码库 > struts2 validate手动验证

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=http://www.mamicode.com/"<%=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=http://www.mamicode.com/"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=http://www.mamicode.com/"登录"/></td>                <td></td>            </tr>        </table>    </s:form>    <br/>        <a href=http://www.mamicode.com/"${pageContext.request.contextPath }/validate/validateAction_test.do">test其他的方法</a>  </body></html>

 

  

struts2 validate手动验证