Tomás Lin在其博客中公布了一套面试Grails开发人员的题目,本站将陆续公布问题的答案。今天公布的是验证部分的试题回答。
验证篇
- Grails中的约束是什么意思?请给出3个示例。
跟数据库中的约束类似,在保存前,Grails会先使用它来验证Domain Class的各个属性,若不能通过,则无法保存或修改,例如:
static constraints = {
login(size:5..15,blank:false,unique:true)
password(size:5..15,blank:false)
email(email:true,blank:false)
age(min:new Date(),nullable:false)
}
详情可参考本站的《Grails 1.2参考文档速读(15):验证》。
display:如果true(缺省值),属性将显示;
editable:如果false,相关表单字段只读。
maxSize(minSize):限制属性值大小,对应列大小;
size:限定属性值大小范围。
Grails提供了配置项:grails.gorm.failOnError,如果设置成true,验证失败时,save()就会抛出grails.validation.ValidationException异常。
对于不想直接暴露Domain Class的场合,可以使用Command Object来代替。Grails的Command Object跟Spring MVC中的没什么区别,是一个View Object。
class LoginController {
def login = { LoginCommand cmd -<
if(cmd.hasErrors()) {
redirect(action:'loginForm')
}else {
// do something else
}
}
}
class LoginCommand {
String username
String password
static constraints = {
username(blank:false, minSize:6)
2011-2-9·password(blank:false, minSize:6)
}
}
详情可参考本站的《Grails 1.2参考文档速读(10):Controller》。
validate用于验证;save()用于保存。在进行实际的保存前,save会调用validate,失败则不保存;反之,保存。
方法1:
- 将类用@Validateable注解
- 在类中定义constraints静态属性
- 在Config.groovy中定义要查找@Validateable的包名:grails.validateable.packages
import org.codehaus.groovy.grails.validation.Validateable
@Validateable
class User {
...
static constraints = {
login(size:5..15, blank:false, unique:true)
password(size:5..15, blank:false)
email(email:true, blank:false)
age(min:18, nullable:false)
}
}grails.validateable.packages = ['com.mycompany.dto', 'com.mycompany.util']
方法2:
- 在类中定义constraints静态属性
class User { ... static constraints = { login(size:5..15, blank:false, unique:true) password(size:5..15, blank:false) email(email:true, blank:false) age(min:18, nullable:false) } } - 在Config.groovy中注册类名: grails.validateable.classes
grails.validateable.classes = [com.mycompany.myapp.User , com.mycompany.dto.Account]
详情可参考本站的《Grails 1.2参考文档速读(15):验证》。

最新评论
9 周 6 小时之前
9 周 1 天之前
11 周 5 天之前
11 周 5 天之前
17 周 2 天之前
17 周 4 天之前
19 周 3 天之前
20 周 1 天之前
20 周 2 天之前
20 周 5 天之前