命令对象内的Grails自定义验证器语法

时间:2014-11-13 02:12:55

标签: grails

我看到一个示例,其中在LoginCommand对象内的客户验证器中使用了以下语法。

password blank:false, validator: { val, cmd ->
     if(cmd.user && cmd.user.password != val) 
         return "user.password.invalid" 
}

我的理解是,在if条款中,我们正在检查两件事。首先,用户存在,其次,用户的密码与LoginCommand持有的密码匹配。检查用户是否存在似乎不是多余的?我的意思是如果用户不存在不会cmd.user.password为空,因此测试会失败?为什么用户需要检查?

如果有必要,那么我们不能使用这种语法cmd.user?.password != val在第二次检查中封装第一个用户存在检查吗?

1 个答案:

答案 0 :(得分:2)

  

我的意思是,如果用户不存在,那么cmd.user.password将为null并且   因此测试会失败吗?

没有。如果用户不存在cmd.user.password将抛出NullPointerException。

  

如果有必要,那么我们就不能封装第一个用户   使用此语法检查第二次检查   cmd.user?.password!= val?

你可以。这只是一种风格问题。无论你认为哪个更具可读性。