我正在使用Grails的项目,
我用bean beanFields插件我将bean更改为:inputTemplate到以下
<bean:inputTemplate>
<div class="prop ${hasErrors(bean:$beanName,field:'$fieldId','errors')}">${label}
<span class="value">${field}
</span>
</div>
</bean:inputTemplate>
尽可能地,我正在尝试使用$ beanName作为BeanName ..这是因为beanFields将beanName和fieldId以及一些其他属性传递给inputTemplate标记。
但是,问题是我不能那样做。而且我真的很懒,也不想花费所有时间复制和粘贴相同的字段div并保留一个巨大的文件...
所以,如果在这种情况下有任何帮助,我会非常感激。
我想在$ {}代码块中引用一个变量,就像在PHP中有$$变量一样,它使用$变量的值作为要评估的变量的名称。
希望我很清楚......并感谢你的帮助。
答案 0 :(得分:0)
答案 1 :(得分:0)
你不应该在beanName前面使用$,它应该在范围内。
<div class="prop ${hasErrors(bean:beanName,field:'username','errors')}" >
另外,我认为beanFields已经通过errors变量提供了错误消息。
因此,您可以测试是否错误不是null而不是调用hasErrors。
答案 2 :(得分:0)
调查问题后..我发现yeah 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>
即使它不起作用,它依赖于域类的验证方法 所以写这个
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])
}
因为,&amp;&amp;第一个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都经过验证,所有字段错误都能正确呈现。