zoukankan      html  css  js  c++  java
  • Struts2 自定义输入校验 第五弹

      Struts2的校验框架有两种:一种是validate方法,另一种是有效的xml文件。

             Action中自定义方法的输入校验,对于通过action的method属性所指定的自定义方法myExecute,其对应的自定义输入校验方法名为validateMyExecute(假设自定义的方法名为myExecute),底层是通过反射机制来调用的。

            当在Action中制定了自定义的excute方法时,首先会执行自定义的excute方法所对应的输入校验方法,然后再去执行validate方法,执行完毕后如果出现了任何错误都不会再去执行自定义的excute方法,流程会转向了input这个返回结果的页面上面。

            自定义Field级别的错误提示消息

    1)新建一个以action命名的properties文件,如RegisterAction.properties

    2)然后在该属性文件中指定每一个出错的字段的错误消息。指定方式:invalid.fieldvalue.具体属性 = 具体错误提示信息

        

    --start 自定义方法的校验 ---

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ taglib prefix="s" uri="/struts-tags" %>
     3 <%
     4 String path = request.getContextPath();
     5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     6 %>
     7 
     8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     9 <html>
    10   <head>
    11     <base href="<%=basePath%>">
    12     
    13     <title>My JSP 'register.jsp' starting page</title>
    14     
    15     <meta http-equiv="pragma" content="no-cache">
    16     <meta http-equiv="cache-control" content="no-cache">
    17     <meta http-equiv="expires" content="0">    
    18     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    19     <meta http-equiv="description" content="This is my page">
    20     <!--
    21     <link rel="stylesheet" type="text/css" href="styles.css">
    22     -->
    23 
    24   </head>
    25   
    26   <body>
    27     <h2><font color="blue">用户注册</font></h2>
    28     
    29     <s:actionerror cssStyle="color:red"/>
    30     
    31     ----------------------------------------
    32     
    33     <s:fielderror cssStyle="color:blue"></s:fielderror>
    34     
    35     <!-- 
    36     <form action="register.action">
    37     
    38     username: <input type="text" name="username" size="20"><br>
    39     password: <input type="password" name="password" size="20"><br>
    40     repassword: <input type="password" name="repassword" size="20"><br>
    41     age: <input type="text" name="age" size="20"><br>
    42     birthday: <input type="text" name="birthday" size="20"><br>
    43     graduation: <input type="text" name="graduation" size="20"><br>
    44     
    45     <input type="submit" value="submit"/>
    46     
    47     </form>
    48      -->
    49     <s:form action="register.action" theme="simple">
    50     
    51     username: <s:textfield name="username" label="username"></s:textfield><br>
    52     password: <s:password name="password" label="password"></s:password><br>
    53     repassword: <s:password name="repassword" label="repassword"></s:password><br>
    54     age: <s:textfield name="age" label="age"></s:textfield><br>
    55     birthday: <s:textfield name="birthday" label="birthday"></s:textfield><br>
    56     graduation: <s:textfield name="graduation" label="graduation"></s:textfield><br>
    57     
    58     <s:submit value="submit"></s:submit>
    59     </s:form>
    60     
    61   </body>
    62 </html>
    register.jsp
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      
      <filter>
          <filter-name>struts2</filter-name>
          <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
      
      <filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
      
    </web-app>
    web.xml
      1 import java.util.Date;
      2 
      3 import com.opensymphony.xwork2.ActionSupport;
      4 
      5 public class RegisterAction extends ActionSupport
      6 {
      7     private String username;
      8     
      9     private String password;
     10     
     11     private String repassword;
     12     
     13     private int age;
     14     
     15     private Date birthday;
     16     
     17     private Date graduation;
     18 
     19     public String getUsername()
     20     {
     21         return username;
     22     }
     23 
     24     public void setUsername(String username)
     25     {
     26         this.username = username;
     27     }
     28 
     29     public String getPassword()
     30     {
     31         return password;
     32     }
     33 
     34     public void setPassword(String password)
     35     {
     36         this.password = password;
     37     }
     38 
     39     public String getRepassword()
     40     {
     41         return repassword;
     42     }
     43 
     44     public void setRepassword(String repassword)
     45     {
     46         this.repassword = repassword;
     47     }
     48 
     49     public int getAge()
     50     {
     51         return age;
     52     }
     53 
     54     public void setAge(int age)
     55     {
     56         this.age = age;
     57     }
     58 
     59     public Date getBirthday()
     60     {
     61         return birthday;
     62     }
     63 
     64     public void setBirthday(Date birthday)
     65     {
     66         this.birthday = birthday;
     67     }
     68     
     69     public Date getGraduation()
     70     {
     71         return graduation;
     72     }
     73 
     74     public void setGraduation(Date graduation)
     75     {
     76         this.graduation = graduation;
     77     }
     78 
     79     @Override
     80     public String execute() throws Exception
     81     {
     82         System.out.println(this.birthday);
     83         
     84         return SUCCESS;
     85     }
     86     
     87     public String myExecute() throws Exception
     88     {
     89         System.out.println("myExecute invoked!");
     90         
     91         return SUCCESS;
     92     }
     93     
     94     public void validateMyExecute()
     95     {
     96         System.out.println("validateMyExecute invoked!!");
     97     }
     98     
     99     
    100     @Override
    101     public void validate()
    102     {
    103         System.out.println("validate invoked!");
    104     }
    105 //    @Override
    106 //    public void validate()
    107 //    {
    108 //        if(null == username || username.length() < 4 || username.length() > 6)
    109 //        {
    110 //            this.addActionError("username invalid");
    111 //            
    112 //            this.addFieldError("username", "u7528u6237u540du4e0du5408u6cd5");
    113 //        }
    114 //        
    115 //        if(null == password || password.length() < 4 || password.length() > 6)
    116 //        {
    117 //            this.addActionError("password invalid");
    118 //        }
    119 //        else if(null == repassword || repassword.length() < 4 || repassword.length() > 6)
    120 //        {
    121 //            this.addActionError("repassword invalid");
    122 //        }
    123 //        else if(!password.equals(repassword))
    124 //        {
    125 //            this.addActionError("the passwords not the same");
    126 //        }
    127 //        
    128 //        if(age < 10 || age > 50)
    129 //        {
    130 //            this.addActionError("age invalid");
    131 //        }
    132 //        
    133 //        if(null == birthday)
    134 //        {
    135 //            this.addActionError("birthday invalid");
    136 //        }
    137 //        
    138 //        if(null == graduation)
    139 //        {
    140 //            this.addActionError("graduation invalid");
    141 //        }
    142 //        
    143 //        if(null != birthday && null != graduation)
    144 //        {
    145 //            Calendar c1 = Calendar.getInstance();
    146 //            c1.setTime(birthday);
    147 //            
    148 //            Calendar c2 = Calendar.getInstance();
    149 //            c2.setTime(graduation);
    150 //            
    151 //            if(!c1.before(c2))
    152 //            {
    153 //                this.addActionError("birthday should be before graduation");
    154 //            }
    155 //        }
    156 //        
    157 //        //this.getFieldErrors().clear();
    158 //        //this.getActionErrors().clear();
    159 //        
    160 ////        this.clearActionErrors();
    161 ////        this.clearFieldErrors();
    162 //        
    163 //        System.out.println("invoked!!!");
    164 //    }
    165     
    166 }
    RegisterAction
    <%@ 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 'registerResult.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">
        -->
    
      </head>
      
      <body>
        
        username: <s:property value="username"/><br>
        password: <s:property value="password"/><br>
        age:<s:property value="age"/><br>
        birthday:<s:property value="birthday"/><br>
        graduate:<s:property value="graduation"/>
      </body>
    </html>
    registerResult.jsp

    --end 自定义方法的校验 ---

    自带的validateFailed 消息 是不明确的,需要自行修改。可以通过自定义属性文件实现(RegisterAction.properties,需要和action同路径)

    1 invalid.fieldvalue.age=u5E74u9F84u4E0Du5408u6CD5!
    2 invalid.fieldvalue.birthday=u751Fu65E5u65E5u671Fu4E0Du5408u6CD5
    3 invalid.fieldvalue.graduation=u6BD5u4E1Au65E5u671Fu4E0Du5408u6CD5
    RegisterAction.properties

    其中,invalid.fieldvalue.age中的invalid.fieldvalue是固定的,不可修改。

    如果提示中文的消息native2ascii.exe 是将中文转化为ASCII码(在jdk/bin目录下面,如果转化直接输入中文敲回车即可!)

             第二种校验方法:有效的xml文件,具体分为字段优先的和校验器优先的

             需要将***-validation.xml的文件放置在对应的action路径下面。

    比如如果要验证RegisterAction,则需要命名为:RegisterAction-validation.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
     4 
     5 <validators>
     6 <!-- 
     7     <field name="username">
     8         <field-validator type="requiredstring">
     9             <param name="trim">false</param>
    10             <message>username can't be blank!</message>
    11         </field-validator>
    12         <field-validator type="stringlength">
    13             <param name="minLength">4</param>
    14             <param name="maxLength">6</param>
    15             <param name="trim">false</param>
    16             <message key="username.invalid"></message>
    17         </field-validator>
    18     </field>
    19     
    20     <field name="password">
    21         <field-validator type="requiredstring">
    22             <message>password can't be blank!</message>
    23         </field-validator>
    24         <field-validator type="stringlength">
    25             <param name="minLength">4</param>
    26             <param name="maxLength">6</param>
    27             <message>length of password should be between ${minLength} and ${maxLength}</message>
    28         </field-validator>
    29     </field>
    30     
    31     <field name="age">
    32         <field-validator type="required">
    33             <message>age can't be blank!</message>
    34         </field-validator>
    35         <field-validator type="int">
    36             <param name="min">10</param>
    37             <param name="max">40</param>
    38             <message>age should be between ${min} and ${max}</message>
    39         </field-validator>
    40         
    41     </field>
    42     
    43     <field name="birthday">
    44         <field-validator type="required">
    45             <message>birthday can't be blank!</message>
    46         </field-validator>
    47         <field-validator type="date">
    48             <param name="min">2005-1-1</param>
    49             <param name="max">2007-12-31</param>
    50             <message>birthday should be between ${min} and ${max}</message>
    51         </field-validator>
    52     </field>
    53     
    54  -->    
    55     
    56     <validator type="requiredstring">
    57         <param name="fieldName">username</param>
    58         <message>username can't be blank!</message>
    59     </validator>
    60     
    61     <validator type="stringlength">
    62         <param name="fieldName">username</param>
    63         <param name="minLength">4</param>
    64         <param name="maxLength">6</param>
    65         <message>length of username should be between ${minLength} and ${maxLength}</message>
    66     </validator>
    67     
    68     <field name="birthday">
    69         <field-validator type="required">
    70             <message>birthday can't be blank!</message>
    71         </field-validator>
    72         <field-validator type="date">
    73             <param name="min">2005-1-1</param>
    74             <param name="max">2007-12-31</param>
    75             <message>birthday should be between ${min} and ${max}</message>
    76         </field-validator>
    77     </field>
    78 </validators>
    RegisterAction-validation.xml

         

  • 相关阅读:
    R--相关分布函数、统计函数的使用
    Spark Streaming
    统计与分布的相关知识
    Python--WebDriverWait+expected_conditions的一个应用
    Python+Selenium与Chrome如何进行完美结合
    Python+Selenium+Chrome 的一个案例
    python -使用Requests库完成Post表单操作
    JetBrains PyCharm 2018.2.4 x64 工具里如何安装bs4
    用JetBrains PyCharm 开发工具写一个简单python案例
    dom4j学习总结(一)
  • 原文地址:https://www.cnblogs.com/feiguo/p/8151422.html
Copyright © 2011-2022 走看看