Grails Groovy中的变量

Grails Groovy中的变量,grails,groovy,grails-plugin,Grails,Groovy,Grails Plugin,我在一个使用Grails的项目中 我使用beanFields插件将bean:inputTemplate更改为以下内容 <bean:inputTemplate> <div class="prop ${hasErrors(bean:$beanName,field:'$fieldId','errors')}">${label} <span class="value">${field} </span> <

我在一个使用Grails的项目中

我使用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中有$$variable,它使用$variable的值作为要计算的变量的名称


希望我是清楚的。。谢谢你的帮助。

这不是对你问题的直接回答,但是你看过bean fields插件吗


我认为它做了你想做的事情,而且你不应该在beanName前面需要$1,它应该在范围之内

<div class="prop ${hasErrors(bean:beanName,field:'username','errors')}" >
另外,我认为beanFields已经通过errors变量提供了错误消息


因此,您可以测试错误是否不为null,而不是调用hasErrors。

在调查问题之后。。我发现yeah beanName被传递到模板,我不需要在beanName前面使用$

但是,当我使用haserrosbeans: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>
因为&&失败,第一个结果为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都得到验证,所有字段错误都得到正确呈现

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{            ...              }