在调查问题后..我发现是的 beanName 被传递给模板,我不需要在 beanName 前面使用 $...
但是,当我使用 hasErrors(beans:beanName,field:'username','errors') 时,它仍然不起作用。
但是,我可以这样做
<bean:inputTemplate>
<div class="prop">${label}
<span class="value">${field}
</span>
<g:if test="${errors}"><div class="errors"> ${errors} </div></g:if>
</div>
</bean:inputTemplate>
尽管它不起作用,但它取决于域类上的 validate 方法
所以写这个
if ( ! (userSecurity.validate() && userProfile.validate() && address.validate() && photo.validate() ) ){
flash.message = ' Error registering user '
render(view:'index',model:[security:userSecurity,user:userProfile,address:address,photo:photo])
}else{
UserSecurity.withTransaction { status ->
userProfile.photos*.save()
address?.save()
userProfile?.save()
userSecurity.password = userSecurity.password.encodeAsPassword()
userSecurity.confirmPassword = userSecurity.confirmPassword.encodeAsPassword()
userSecurity?.save()
}
flash.message = 'No Errors Registering User'
render(view:'index',model:[security:userSecurity,user:userProfile,address:address,photo:photo])
}
因为 && 以第一个 False 结果失败,并且其他验证方法没有被执行。
所以把它们改成这个
if ( ! (userSecurity.validate() & userProfile.validate() & address.validate() & photo.validate() ) ){
flash.message = ' Error registering user '
render(view:'index',model:[security:userSecurity,user:userProfile,address:address,photo:photo])
}else{ ... }
每个 bean 都经过验证,所有字段错误都会正确呈现。