Grails的驗(yàn)證功能是建立在Spring's Validator API和數(shù)據(jù)綁定之上的,但Grails在此特性和約束機(jī)制的基礎(chǔ)上又提供了統(tǒng)一的定義驗(yàn)證約束的方法。
在一個(gè)領(lǐng)域類中,約束constraints被定義在constraints屬性的代碼塊中:
class User {
...
static constraints = {
userName(size:5..15, blank:false, unique:true)
password(size:5..15, blank:false)
email(email:true, blank:false)
age(min:18, nullable:false)
}
}
這樣在你每次保存一個(gè)對(duì)象的時(shí)候都回去調(diào)用validate方法來驗(yàn)證.
當(dāng)然你可以在任何實(shí)例上調(diào)用其validate方法去驗(yàn)證領(lǐng)域類.
def user = new User(params)
if(user.validate()) {
// do something with user
} else {
user.errors.allErrors.each {
println it
}
}
如果你在注冊(cè)的時(shí)候, 比如要輸入兩次密碼, 這時(shí)候想把錯(cuò)誤消息也放入領(lǐng)域類的errors屬性里面, 由于領(lǐng)域類的 errors屬性是Spring的Errors接口實(shí)例,
Errors接口提供了訪問這些驗(yàn)證錯(cuò)誤的方法,并且還可以取得原始的值。
具體使用的實(shí)現(xiàn)類是BeanPropertyBindingResult
Java.lang.Object
org.springframework.validation.AbstractErrors
org.springframework.validation.AbstractBindingResult
org.springframework.validation.AbstractPropertyBindingResult
org.springframework.validation.BeanPropertyBindingResult
每一個(gè)消息對(duì)應(yīng)一個(gè)org.springframework.validation.ObjectError對(duì)象.所有可以想領(lǐng)域類的errors屬性里面直接添加ObjectError對(duì)象就可以了.
def error = new ObjectError('password', message(code:'pinpin.register.valid.password.notequal'))
user.errors.addError(error)
posted on 2008-07-20 22:20
周銳 閱讀(1076)
評(píng)論(0) 編輯 收藏 所屬分類:
Groovy&Grails