2010-01-25 4 views
5

Lorsque vous utilisez Grails, le code SGP pour rendre chaque champ de formulaire ressemble à quelque chose comme ceci:Faire SÈCHE-développement sous forme Grails

<tr class="prop"> 
    <td valign="top" class="name"><label for="username">Login Name:</label></td> 
    <td valign="top" class="value ${hasErrors(bean: person, field: 'username', 'errors')}"> 
    <input type="text" id="username" name="username" value="${person.username?.encodeAsHTML()}"/> 
    </td> 
</tr> 

<tr class="prop"> 
    <td valign="top" class="name"><label for="userRealName">Full Name:</label></td> 
    <td valign="top" class="value ${hasErrors(bean: person, field: 'userRealName', 'errors')}"> 
    <input type="text" id="userRealName" name="userRealName" value="${person.userRealName?.encodeAsHTML()}"/> 
    </td> 
</tr> 

<tr class="prop"> 
    <td valign="top" class="name"><label for="passwd">Password:</label></td> 
    <td valign="top" class="value ${hasErrors(bean: person, field: 'passwd', 'errors')}"> 
    <input type="password" id="passwd" name="passwd" value="${person.passwd?.encodeAsHTML()}"/> 
    </td> 
</tr> 

Notez que presque exactement les mêmes 5 lignes de code GSP/HTML est répété pour chaque forme champ. Cela ne me semble pas très sec, et je me demande si d'autres ont trouvé une meilleure approche?

J'ai trouvé 2 plugins qui tentent de résoudre ce problème, les form helper et bean-fields. Si quelqu'un a de l'expérience avec l'un ou l'autre, je serais très intéressé d'en entendre parler. Sinon, s'il y a d'autres solutions/plugins, s'il vous plaît faites le moi savoir.

Merci. Don

Répondre

5

Utilisation du bean-field plugin. Votre code deviendra:

<bean:withBean beanName="person"> 
    <bean:field property="username" label="Login Name:"/> 
    <bean:field property="userRealName" label="Full Name:"/> 
    <bean:field property="passwd" label="Password:"/> 
</bean:withBean> 

Pouvez-vous trouver une solution sèche?

+1

@ réponse sudhir est DRYer, puisque le plugin Grails Fields fera tout cela avec une seule étiquette. – cdeszaq

5

Oui, haricot champs plugin est très sec ... vos 20 lignes peuvent être remplacées par une ligne:

<bean:form beanName="person" properties="username, userRealName, passwd”/> 

(En supposant que vous avez des propriétés i18n définies)

8

Pour ceux qui lisent ce fil future - Pour grails 2.x branche Grails fields plugin est recommandé sur les champs de haricots, son successeur de champs de bean et offre la flexibilité de remplacer les modèles par défaut

+1

Je n'ai jamais réalisé que je vivais dans le futur jusqu'à maintenant :) – David