Struts2 使用Validation框架验证数据(三十七)

A:在Struts2的框架汇中,开发者可以通过继承ActionSupport()类,并重写validate()方法来完成输入校验。使用在Action中重写Validate()或者 validateXxx()方法实现校验对某个方法起作用。
   例如:validate()方法会对action中的所有 逻辑处理方法起作用  比如:execute() , login()

B:采用Struts2的内置校验器 也就是配置文件 来实现校验

-----------Validate()------------------------
1.在Struts2的框架汇中,专门用来校验数据的方法是validate(),开发者可以通过继承ActionSupport()类,并重写validate()方法来完成输入校验。
validate()方法会对action中的所有 逻辑处理方法起作用  比如:execute() ,    login()

2.action.

package com.sh.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;
import com.sun.xml.internal.fastinfoset.stax.events.Util;

public class ValidateAction extends ActionSupport {
private String name;
private String pwd;
private Date date;


@Override
public String execute() throws Exception {
	// TODO Auto-generated method stub
	return SUCCESS;
}

@Override
public void validate() {
	if(date==null || date.after(new Date())){
		addFieldError("date", "出生日期无效!");
	}
	if(pwd==null || Util.isEmptyString(pwd)){
		addFieldError("pwd", "密码不能为空!");
	}
}
}

3.struts.xml



 
	
	
	  
     
	
	
		
			/success.jsp
			/index.jsp
		
	
    


4.login.jsp


  
   
   	用户名:
复合生日:
常用日期:
常用日期2:


5访问
--http://localhost:8080/Struts2_validate/index.jsp


-----------ValidateXxxx()------------------------

6.只对action中某一个处理方法 进行校验  测试login(如果 valudate()不注释,就会对所有的方法起作用)

package com.sh.action;

import java.util.Date;
import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionSupport;
import com.sun.xml.internal.fastinfoset.stax.events.Util;

public class ValidateAction extends ActionSupport {
private String name;
private String pwd;
private Date date;


@Override
public String execute() throws Exception {
	// TODO Auto-generated method stub
	return SUCCESS;
}

@Override  //会对所有的 方法都有作用 比如 execute login
public void validate() {
	if(date==null || date.after(new Date())){
		addFieldError("date", "出生日期无效!");
	}
	if(pwd==null || Util.isEmptyString(pwd)){
		addFieldError("pwd", "密码不能为空!");
	}
}

//登陆方法
public String login(){
	return SUCCESS;
}
//只对登录方法进行校验
public void validateLogin(){
	if(name!=null && !Pattern.matches("\\w{6,15}", name.trim())){
		addFieldError(name, "validateLogin()方法的作用");
	}
}
//get set

}


7.struts.xml



 
	
	
	  
     
	
	
		
			/success.jsp
			/index.jsp
		
		
			/success.jsp
			/index.jsp
		
	
    


8.访问
--http://localhost:8080/Struts2_validate/index.jsp
--如果不输入端额话,将会出现指定的错误信息。


-----------Struts2内置校验器------------------------
struts2的所有校验器在
xwork-core.jar/com.opensymphony.xwork2.validator.validators/default.xml 中有定义。

9.Struts2内置校验器的种类

required:必填校验器
requiredstring:必填字符串校验器
stringlength:  字符串长度校验器
int:整数校验器
date:日期校验器
expression:表达式校验器
fieldexpression:字段表达式校验器
email: 邮件地址校验器
url:网址校验器
conversioin:转换校验器
regex:正则表达式校验器


10.使用Struts2内置校验器
字段校验器配置风格

  
     
        参数值
          提示信息
     
  

  
  




11.非字段校验器配置风格

  
     
     需要被校验的字段
       
     参数值
    提示信息
  



12.使用内置校验器需要定义 ActionName-validate.xml文件 在其中定义 字段校验器和非字段校验器

--------使用 字段校验器 --------
13.action 

package com.sh.action;

import com.opensymphony.xwork2.ActionSupport;

public class InnerValidatorAction extends ActionSupport {

	private int age;
	private String name;
	
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
//get set
}


14.InnerValidatorAction-validation.xml 定义上面 aciton的校验文件










	 
	  	年龄必须为整数
	 





	
		 18
		 100
		 年龄必须在${min}到${max}之间
	






姓名不能为空






	15
	6
	姓名长度必须为${minLength}到${maxLength}之间!






15.strust.xml



 
	
	
	  
     
	
	
		
			/success.jsp
			/login.jsp
			
		
	
    




16.login.jsp

 
  
   
   	用户名:
年龄:


17.访问上
--http://localhost:8080/Struts2_validator/login.jsp
如果不输入就可以看到 验证的消息

18.使用  非字段校验器 InnerValidator1Action-validation.xml



	name
	姓名不能为空!


 
 name
 15
 6
 姓名长度为${minLength}到${maxLength}之间!
 




----------复合属性 校验------------

A:使用字段校验器
1.pojo

package com.sh.pojo;

public class User {
private String name;
private String pwd;
private String mobile;

//get set
}


2.action


package com.sh.action;

import com.opensymphony.xwork2.ActionSupport;
import com.sh.pojo.User;

public class UserAction extends ActionSupport {

	private User user;
@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
//get set

}


3.编写UserAction-validation.xml 校验文件


        


	
		
		true
		手机号不能为空 
	
	
		
		手机号格式不正确
	





4.jsp


  
   
   	用户名:
密码:
手机版:


5.访问
---http://localhost:8080/Struts2_validator/login2.jsp
--如果不填 或者格式错误会有提示的


B使用 visitor 校验复合属性
1.action

package com.sh.action;

import com.opensymphony.xwork2.ActionSupport;
import com.sh.pojo.User;

public class VisitorAction  extends ActionSupport{

	private User user;

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
//get set
}


2.定义 aciton校验文件 VisitorAction-validation.xml


        

	
		
			
			visitorContext
			
		    true
		    联系人:
		
	



3.定义实体类User 的上下文校验文件User-visitorContext-validation.xml (和User同目录)




	
		
			姓名不能为空!
		
	
	
		
			10
			100
			年龄为${min}到${max}之间
		
	



4.login3.jsp

  
  
   
   	用户名:
年龄:
手机版:


5.struts.xml




 
	
	  
     
	
	
		
			/index.jsp
			/login3.jsp
		
	
    



6.访问
--http://localhost:8080/Struts2_validator/login3.jsp
--没有输入的时候会看到验证信息



---------------集合属性校验---------------
1.action

package com.sh.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.sh.pojo.User;

public class VisitorListAction extends ActionSupport {

	private List userlist;

	@Override
	public String execute() throws Exception {
		System.out.println("1");
		return super.execute();
	}
     //get set
}



2.定义action的校验文 VisitorListAction-validation.xml


        

	
		
			
			visitorContext2
			
		    true
		    联系人:
		
	




3.定义集合中的对象 描述属性文件VisitorListAction-conversion.properties
(命名规则为 ActionNaqme-conversion.properties 具体的在 三十五 章里介绍)

Element_userlist=com.sh.pojo.User


4.定义集合对象校验文件User-visitorContext2-validation.xml




	
		
			姓名不能为空!
		
	
	
		
			20
			120
			年龄为${min}到${max}之间
		
	




5.struts.xml



 
	
	  
     
	
	
		
			/success.jsp
			/visitorList.jsp		
		
	
    





6.visitorList.jsp


    
 	
  • 用户名
  • 密码
  • 年龄
  • 生日
  • 地址


7.访问
--http://localhost:8080/Struts2_validator/visitorList.jsp
--可以看到所设定的所有被校验的字段

-------------内置校验器 : required--------
1.用于要求户必须有值,(非null),
参数:fieldName:校验的字段名, 如果是字段校验则不用指定该参数。
2.用户 验证 一个对象是否为空
3.不能用来校验 string 类型的必填. 如果要校验 则使用 requiredstring。
4. required要求的是一个对象不能为null,它可以验证像Date类型的对象
5.requiredstring只是对字符串做限制
  有参数 maxLength
         minLength
         trim

-------------内置校验器 :conversion-------
1.action

package com.sh.action;

import com.opensymphony.xwork2.ActionSupport;

public class IntAction extends ActionSupport {

private int age;

public int getAge() {
	return age;
}

public void setAge(int age) {
	this.age = age;
}

@Override
public String execute() throws Exception {
	// TODO Auto-generated method stub
	return SUCCESS;
}

}



2,校验文件 IntAction-validation.xml



        

	
		
			
			true
			
		    年龄必须为整数:
		
	



3.struts.xml
	
		/success.jsp
			/int.jsp	
		


4.int.jsp


  ==================使用内置校验器  类型转转校验器========================
  
   
   	用户名:
年龄:


5.访问
--http://localhost:8383/Struts2_validator/int.jsp
--如果不输入 就出现 年龄必须为整数:错误信息
--如果输入 字符  就会出现两个 错误信息 
---其中一个错误信息是 Struts2框架的错误信息为英文 为了解决这个问题 下面可以 改为只能够为 中文 或者 置空 这样就只有一个错误提示 或者 连个中文提示

6.定义IntAction_zh_CN.properties

invalid.fieldvalue.age=properties文件:年龄必须整数
#或者xia'm
#invalid.fieldvalue.age=  


这样就会提示两个中文错误信息 (不过意思是一样的)


-------------------Date--------------
1,校验文件 DateAction-validation.xml



        

	
		
			
			2012-12-20
                        1997-01-01
		    生日应在 ${min}到${max}之间
		
	



-------------------Emal 和 URL--------------------
1.EmailUrlAction-validation.xml




	
		
			邮件地址不正确
		
	
	
		
			网址格式不正确
		
	


------------------------expression 和 fieldexpression----------
expression 不能使用字段校验风格配置
fieldexpression 两种都可以使用







	max2 > min2
	max1要大于 min1




	max2 > min2
	max2要大于 min2






--------------------double----------------------

	
		
		
			
			10
			
			100
			${minInclusive}大于等于 薪水 小于等于  ${maxInclusive}			
		
		
		
		
			
			10
			
			100
			"${minInclusive}大于  薪水 小于 ${maxInclusive}"			
		
	
	


-----------------------regex-----------------------

		
			
				
			
			不是有效的邮政编码!
		
	


------------------自定义校验器--------------
1.action

package com.sh.action;

import com.opensymphony.xwork2.ActionSupport;

public class MyValidateAction extends ActionSupport {
private String name;

@Override
public String execute() throws Exception {
	// TODO Auto-generated method stub
	return SUCCESS;
}
//get set
}


2.自定义一个校验器类 继承相应的 校验接口 就可以了 MyValidate .java

package com.sh.validate;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class MyValidate extends FieldValidatorSupport {

	private String name; //对应
	public void validate(Object object) throws ValidationException {
		// TODO Auto-generated method stub
		String fieldName=super.getFieldName();
		String value=super.getFieldValue(fieldName, object).toString();
		
		if(!name.equals(value)){
			super.addFieldError(super.getFieldName(), object);
		}
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
}



3.在框架中注册自定义的校验器类 编写 validators.xml (文件名固定)








4.使用自定义校验器类 编写 校验文件 MyValidateAction-validation.xml


        

	
		
			admin
		    姓名必须为${name}!
		
	



5.struts.xml

		
			/success.jsp
			/myValidator.jsp
		


6.myValidator.jsp

  
  ==================使用内置校验器 自定义校验器的使用========================
  
   
   	用户名:
年龄:


7.访问
--http://localhost:8383/Struts2_validator/myValidator.jsp
--如果输入就会出现  姓名必须为admin!的错误信息
  • Struts2_validator.zip (3.3 MB)
  • 下载次数: 76

你可能感兴趣的:(字段校验与非字段校验,复合属性校验,集合属性校验,内置校验器,自定义校验器)