zoukankan      html  css  js  c++  java
  • 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>

      

  • 相关阅读:
    java基础-代理模式
    java基础-反射(细节)
    java基础-反射
    设计模式之单例
    23种设计模式汇总整理
    dialog--not attached to window manager
    java之设计模式
    android-sdk和api版本
    studio之mac快捷键
    控件之ReleLayout属性
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5895603.html
Copyright © 2011-2022 走看看