天天看點

SpringMVC使用@Valid注解表單驗證資料

若要使用JSR-303資料校驗規範,可以使用Hibernate-validator校驗架構,Hibernate-validator實作了JSR-303驗證架構支援注解風格的驗證。

連結:http://hibernate.org/validator/

解壓後把hibernate-validator-x.xx.xx.Final.jar、jboss-logging-x.x.x.jar、validation-api-x.x.x.GA.jar、classmate-x.x.x.jar這四個包添加到項目中。

以使用者注冊為例子

Entity:  User.java

public class User {
	@Size(min=6, max=15, message="Username must be 6-15 chars long")
	@Pattern(regexp="^[a-zA-Z0-9]+$", message="username must no spaces")
	private String username;
	@Size(min=6, max=15, message="password must be 6-15 chars long")
	@Pattern(regexp="^[a-zA-Z0-9]+$", message="password must no spaces")
	private String password;
	@Size(min=6, max=15, message="name must be 6-15 chars long")
	private String name;
	@Pattern(regexp="[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}", message="Invalid email address")
	private String email;
<span style="white-space:pre">	</span>//Get Set 方法此處已省略
}
           

Controller:

//@Valid 根據 JSR-303标準對JavaBead中标注的屬性進行校驗
	@RequestMapping(method=RequestMethod.POST)
	public String acceptForm(@Valid User user, BindingResult bindingResult){
		if(bindingResult.hasErrors()){
			return "user/register";
		}
		
		System.out.println("save user success");
		
		return "redirect:/hello/" + user.getUsername();
	}
           

在表單中可以使用Spring form tags

<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>

JSP:

<sf:form method="POST" modelAttribute="user">
		<fieldset>
		<table cellspacing="0">
		<tr>
			<th><label>Name:</label></th>
			<td><sf:input path="name" size="15"/>
				<sf:errors path="name" cssClass="error" />
			</td>
		</tr>
		<tr>
			<th><label>Username:</label></th>
			<td><sf:input path="username" size="15" maxlength="10"/>
				<sf:errors path="username" cssClass="error" />
			</td>
			
		</tr>
		<tr>
			<th><label>Password:</label></th>
			<td><sf:password path="password" size="15"/>
				<sf:errors path="password" cssClass="error" />
			</td>
		</tr>
		<tr>
			<th><label>Email:</label></th>
			<td><sf:input path="email" size="15"/>
				<sf:errors path="email" cssClass="error" />
			</td>
		</tr>
		<tr>
			<th></th>
			<td><input type="submit" value="create" /></td>
		</tr>
		</table>
		</fieldset>
	</sf:form>
           

在JSP中的<sf:errors  /> 會自動解析出相應的錯誤資訊來,如圖

SpringMVC使用@Valid注解表單驗證資料

JSR-303其他校驗規範

空檢查
@Null       驗證對象是否為null
@NotNull    驗證對象是否不為null, 無法查檢長度為0的字元串
@NotBlank 檢查限制字元串是不是Null還有被Trim的長度是否大于0,隻對字元串,且會去掉前後空格.
@NotEmpty 檢查限制元素是否為NULL或者是EMPTY.
 
Booelan檢查
@AssertTrue     驗證 Boolean 對象是否為 true  
@AssertFalse    驗證 Boolean 對象是否為 false  
 
長度檢查
@Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的範圍之内  
@Length(min=, max=) Validates that the annotated string is between min and max included.
 
日期檢查
@Past           驗證 Date 和 Calendar 對象是否在目前時間之前  
@Future     驗證 Date 和 Calendar 對象是否在目前時間之後  
@Pattern    驗證 String 對象是否符合正規表達式的規則
 
數值檢查,建議使用在Stirng,Integer類型,不建議使用在int類型上,因為表單值為“”時無法轉換為int,但可以轉換為Stirng為"",Integer為null
@Min            驗證 Number 和 String 對象是否大等于指定的值  
@Max            驗證 Number 和 String 對象是否小等于指定的值  
@DecimalMax 被标注的值必須不大于限制中指定的最大值. 這個限制的參數是一個通過BigDecimal定義的最大值的字元串表示.小數存在精度
@DecimalMin 被标注的值必須不小于限制中指定的最小值. 這個限制的參數是一個通過BigDecimal定義的最小值的字元串表示.小數存在精度
@Digits     驗證 Number 和 String 的構成是否合法  
@Digits(integer=,fraction=) 驗證字元串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度。
 
@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
@Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage;
 
@Valid 遞歸的對關聯對象進行校驗, 如果關聯對象是個集合或者數組,那麼對其中的元素進行遞歸校驗,如果是一個map,則對其中的值部分進行校驗.(是否進行遞歸驗證)
@CreditCardNumber信用卡驗證
@Email  驗證是否是郵件位址,如果為null,不進行驗證,算通過驗證。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)
           

繼續閱讀