問題を調査した後..ええ、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が検証され、すべてのフィールドエラーが正しくレンダリングされます。