struts2入门教程五(表单数据的校验)(一)

2014-11-24 01:34:10 · 作者: · 浏览: 2


一: 手动编写代码实现校验

操作方式

通过重写validate() 方法实现, validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过 显示失败信息

注意:

通过validateXxx()方法实现,validateXxx()只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过 显示失败信息。

Java 代码:

package action;
 
import java.util.Date;
import java.util.regex.Pattern;
 
importcom.opensymphony.xwork2.ActionSupport;
 
public class ValidateAction extendsActionSupport {
 
        
         privateString name;
         privateString pass;
         privateDate birth;
         privateInteger age;
      
         @Override
         publicString execute() throws Exception {
                  
                   returnSUCCESS;
         }
        
        
         publicString add(){
                   returnSUCCESS;
         }
         publicvoid validateAdd(){
                   System.out.println("validateAdd---------------");
                  
                   if(name==null|| "".equals(name.trim())){
                            this.addFieldError("name","名称不能为空");
                   }
                  
                   if(age==null){
                            this.addFieldError("age","名称不能为空");
                   }elseif(!Pattern.compile("^([0-9]|[0-9]{2}|100)$").matcher(String.valueOf(age)).matches()){
                           
                   }
             {
                       addFieldError("age","年龄必须为1-100");
             }
                   }
        
         publicString getName() {
                   returnname;
         }
         publicvoid setName(String name) {
                   this.name= name;
         }
         publicString getPass() {
                   returnpass;
         }
         publicvoid setPass(String pass) {
                   this.pass= pass;
         }
         publicDate getBirth() {
                   returnbirth;
         }
         publicvoid setBirth(Date birth) {
                   this.birth= birth;
         }
 
 
         publicInteger getAge() {
                   returnage;
         }
 
 
         publicvoid setAge(Integer age) {
                   this.age= age;
         }
        

}


Struts.xml

<

 xml version="1.0"encoding="UTF-8"  >


  
  
   
    
     
     
       /index.
      jsp 
      
     
       /login.jsp 
      
     
   
 

  

Login.jsp

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"prefix="s" %>
 


 
   
   
   My JSP 'index.jsp' starting page
  
 
 
 
 
 
  
  
  
  
   
      
   
      
   
      
   
      
   
  
  
 


校验流程

1。类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。

2。如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3步。

3。系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。

4。再调用action中的validate()方法。

5。经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。

测试效果:

\

二:使用配置文件进行校验

常见的struts2 校验器

1.conversion validator 字段验证器,检查转换错误发生。

2.date validator 字段验证器检查提供的日期是否在特定的范围内。

3double validatZ http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vciAgINa4tqjX1rbO0enWpMb3vOyy6cur1NrSu7aot7bOp8TaoaM8L3A+CjxwPjRlbWFpbCB2YWxpZGF0b3IgRW1haWxWYWxpZGF0b3K87LLp0ru49rj4tqi1xNfWt/u0rtfWts4syOe5+7K7yse/1bXELMrH0ru49tPQ0Ke1xLXn19PTyrz+tdjWt6GjPC9wPgo8cD7X1rf7tK61xNX91PKx7bTvyr3Tw9Pa0enWpLXn19PTyrz+tdjWt8rHOqO6PC9wPgo8cCBhbGlnbj0="left">\\b(^[_A-Za-z0-9-](\\.[_A-Za-z0-9-])*@([A-Za-z0-9-])+((\\.com)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$)\\b

5expression validator 无级别验证器,验证基于正则表达式提供。6 fieldexpression验证器6fieldexpression validator 验证一个字段使用OGNL表达式。

7int validator 字段验证器,检查是否在一定的范围内指定的整数。

8regex validato