社会主义接班人 通过本文主要向大家介绍了struts2 validator,validator验证框架,validator,bootstrapvalidator,hibernate validator等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
Struts2中提供了数据校验验证数据例如验证邮件、数字等。验证方式有3种:一是通过validate()方法,二是通过Xml,三是使用注解方式。
一、初始化
首先定义一个User类
package com.cyw.test; import java.util.Date; public class User { private String name; private int age; private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getBirthDay() { return birthDay; } public void setBirthDay(Date birthDay) { this.birthDay = birthDay; } private Date birthDay; }</div>
二、validate()方法验证
可以在继承了ActionSupport的Action中重写validate()来进行验证。validate()方法会在execute()方法执行前执行,仅当数据校验正确,才执行execute()方法, 如错误则将错误添加到fieldErrors域中,如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑需要不同的校验规则,这种情况下validate()会对所有处理逻辑使用相同的校验规则,为了实现不同的校验逻辑,需要通过validateX()方法,其中X表示处理逻辑的方法名,如果有错误系统会返回result name="input"的页面,所以需要在action中定义一个input的result。我昨天就困在这个地方好久。问了我大学同学才解决,为了这个validate()验证昨晚一点多都没睡,虽然SSH框架现在不流行,特别是前几天struts2报了一个远程bug,不过想着既然学java了,就系统的学一遍吧。
1.validate()方法
package com.cyw.test; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.opensymphony.xwork2.ActionSupport; public class ValidatorAction extends ActionSupport { private User user; private List<User>userList=new ArrayList<User>(); public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } @Override public String execute() throws Exception { if(user==null || this.hasFieldErrors()) { return "regist"; } else { return "success"; } } public String addUser() { userList.add(user); return "success"; } private static final long serialVersionUID = 1L; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public void validate() { if(user!=null) { if(!dataPass( user.getName(),"^[A-Za-z][A-Za-z1-9_-]+$")) { addFieldError("user.name", "用户名(字母开头 + 数字/字母/下划线)"); } if(!dataPass(String.format("%d", user.getAge()) ,"(?:[1-9][0-9]?|1[01][0-9]|120)")) { addFieldError("user.name", "年龄0-120之间"); } Date startDate=strToDate("1900-01-01"); Date endDate=strToDate("2017-01-01"); if(user.getBirthDay().before(startDate) || user.getBirthDay().after(endDate) ) { addFieldError("birthDay", "出生日期在1900-01-01至2017-01-01之间。"); } if(!dataPass(user.getEmail(),"^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}$")) { addFieldError("email", "邮箱格式不符合"); } } } private Date strToDate(String strDate) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate, pos); return strtodate; } private boolean dataPass(String str,String regEx) { Pattern pattern=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE); Matcher matcher =pattern.matcher(str); return matcher.matches(); } }</div>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="default" namespace="" extends="struts-default"> <action name="regist" class="com.cyw.test.ValidatorAction"> <result name="regist">/register.jsp</result> <result name="success">/success.jsp</result> <result name="input">/register.jsp</result> </action> </package> </struts></div>
2.validateX()方法
package com.cyw.test; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.opensymphony.xwork2.ActionSupport; public class ValidatorAction extends ActionSupport { private User user; private List<User>userList=new ArrayList<User>(); public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } public String addUser() { if(user==null) { return "regist"; } userList.add(user); return "success"; } private static final long serialVersionUID = 1L; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public void validateAddUser() { if(user!=null) { if(!dataPass( user.getName(),"^[A-Za-z][A-Za-z1-9_-]+$")) { addFieldError("user.name", "用户名(字母开头 + 数字/字母/下划线)"); } if(!dataPass(String.format("%d", user.getAge()) ,"(?:[1-9][0-9]?|1[01][0-9]|120)")) { addFieldError("user.name", "年龄0-120之间"); } Date startDate=strToDate("1900-01-01"); Date endDate=strToDate("2017-01-01"); if(user.getBirthDay().before(startDate) || user.getBirthDay().after(endDate) ) { addFieldError("birthDay", "出生日期在1900-01-01至2017-01-01之间。"); } if(!dataPass(user.getEmail(),"^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}$")) { addFieldError("email", "邮箱格式不符合"); } } } private Date strToDate(String strDate) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate, pos); return strtodate; } private boolean dataPass(String str,String regEx) { Pattern pattern=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE); Matcher matcher =pattern.matcher(str); return matcher.matches(); } }</div>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="default" namespace="" extends="struts-default"> <action name="regist" class="com.cyw.test.ValidatorAction" method="addUser"> <result name="regist">/register.jsp</result> <result name="success">/success.jsp</result> <result name="input">/register.jsp</result> </action> </package> </struts></div>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ tagl