grails vaidate()与hasErrors区别

现有一个domain如下
class Book {
    String name
    Double price
        static constraints = {
        name(blank:false,unique:true)
        price(nullalbe:true)
      }
}


可以用validate()来验证domain的一个实例
def book=  new Book()
 if(book.validate()) {
    // do something with book
}
else {
    book.errors.allErrors.each {
        println it
    }
}

这时vaidate()方法根据Book的constraints 来check,book.validate()返回false,而且默认的在执行save()之前会调用validate()
if(book.save()) {
    return book
}
else {
    book.errors.allErrors.each {
        println it
    }
}


看下面的hasErrors代码
def book2 =  new Book(name:'Grails',price:'a')
  if(!book2.hasErrors()) {
    // do something with book2
}
else {
    book2.errors.allErrors.each {
        println it
    }
}

在这个时候如果你通过hasErrors来check(可能是因为类型转换),如上面double类型price的值为“a”,book2.hasErrors()返回值为true.

我做了一个测试,即
def book3 =  new Book(name:'Grails',price:'a')
  if(book3.save()) {
    render book3
}
else {
    book3.errors.allErrors.each {
        println it
    }
}

这时虽然price的值为'a',但是book3仍能保存成功,只是保存的price的值为0

你可能感兴趣的:(java,grails)