2009-10-27 8 views
0

Je suis dans un projet en utilisant Grails,Variable Variable Groovy

I utilisateur plug-in beanFields où je change la fève: inputTemplate dans le

<bean:inputTemplate> 
    <div class="prop ${hasErrors(bean:$beanName,field:'$fieldId','errors')}">${label} 
     <span class="value">${field} 
     </span> 
    </div> 
    </bean:inputTemplate> 

suivante Comme vous pouvez, je suis essayer d'utiliser $ beanName comme BeanName .. c'est parce que beanFields passe beanName et fieldId et quelques autres propriétés à la balise inputTemplate ..

Mais, le problème est que je ne peux pas faire ça .. Et je ' m vraiment paresseux et ne veux pas passer tout le temps copier et coller le même champ div et en maintenant un énorme fichier pour cela ...

Donc, je serai vraiment reconnaissant si tout pourrait aider dans cette situation. Je veux faire référence à une variable dans le bloc de code $ {}, car en PHP, il y a une variable $$ qui utilise la valeur de la variable $ comme nom d'une variable à évaluer.

Espérons que j'ai été assez clair .. et merci de votre aide.

Répondre

0

Pas une réponse directe à votre question, mais avez-vous vu le plugin Bean-champs?

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

Je pense qu'il fait ce que vous essayez de faire, et plus

0

Vous ne devriez pas avoir besoin d'un $ devant beanName, il devrait être portée.

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

De plus, je pense que beanFields fournit déjà les messages d'erreur via la variable d'erreur. Vous pouvez donc tester si les erreurs ne sont pas nulles au lieu d'appeler hasErrors.

0

Après avoir enquêté sur la question .. J'ai trouvé le oui beanName être transmis au modèle et je ne pas besoin d'utiliser $ devant la beanName ...

Mais, encore quand je l'utilise hasErrors (haricots : beanName, champ: 'nom d'utilisateur', 'erreurs') cela ne fonctionne pas.

Mais, je pouvais le faire

<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> 

Même si, ça n'a pas marché, cela dépend de la méthode de validation sur les classes de domaine écriture donc ce

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]) 
      } 

Parce que, le & & échoue avec le premier résultat Faux et les autres méthodes de validation ne sont pas exécutées.

afin de les modifier à ce

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

Chaque haricot se validé, et tous les champs erreurs obtenir correctement rendu.