После изучения проблемы .. Я обнаружил, что beanName да передается в шаблон, и мне не нужно использовать $ перед beanName ...
Но, тем не менее, когда я использую hasErrors (beans: beanName, поле: '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{ ... }
Каждый бин проверяется, и все ошибки полей отображаются правильно.