2009-10-27 3 views
0

Я в проекте с использованием Grails,переменной Variable в Groovy

Я пользователь beanFields плагин, где я меняю боб: 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.

Но проблема в том, что я не могу этого сделать. я действительно ленив и не хочу все время копировать и вставлять одно и то же поле d iv и поддерживая огромный файл для этого ...

Итак, я буду очень благодарен, если кто-нибудь сможет помочь в этой ситуации.

Я хочу ссылаться на переменную внутри блока кода $ {}, так как в PHP есть переменная $$, которая использует значение переменной $ как имя переменной для оценки.

Надеюсь, что я был достаточно ясен и благодарю вас за помощь.

ответ

0

Не прямой ответ на ваш вопрос, но вы видели плагин бобовых полей?

http://grails.org/plugin/bean-fields

Я думаю, что это то, что вы пытаетесь сделать, и более

0

Вы не должны нуждаться в $ перед beanName, он должен находиться в области видимости.

<div class="prop ${hasErrors(bean:beanName,field:'username','errors')}" > 

Кроме того, я думаю, что beanFields уже предоставляет сообщения об ошибках через переменную ошибок.

Итак, вы можете проверить, не являются ли ошибки не null вместо вызова hasErrors.

0

После изучения вопроса .. Я нашел да beanName получить прошло в шаблон, и мне не нужно использовать $ перед beanName ...

Но, до сих пор, когда я использую hasErrors (фасоль : 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> 

Несмотря на то, что не работает, это зависит от метода валидации на классах домена так пишут это

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

Каждому боб получает проверен, и все поля ошибки получить правильное отображение.

 Смежные вопросы

  • Нет связанных вопросов^_^