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

         

  • 相关阅读:
    在SQLite中使用索引优化查询速度
    SQLite支持的SQL数据操作
    left (outer) join , right (outer) join, full (outer) join, (inner) join, cross join 区别
    深入理解Android内存管理原理(六)
    Merge Sorted Array
    Sort Colors
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Tree Postorder Traversal
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/feiguo/p/8151422.html
Copyright © 2011-2022 走看看