2010-01-25 4 views
5

Wenn Grails verwenden, der Code APS jedes Formularfeld zu machen sieht ungefähr so ​​aus:machen Grails Form Entwicklung Dryer

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

Beachten Sie, dass fast genau die gleichen 5 Zeilen GSP/HTML-Code für jede Form wiederholt wird Feld. Das scheint mir nicht sehr trocken zu sein, und ich frage mich, ob andere einen besseren Ansatz gefunden haben.

Ich habe 2 Plugins gefunden, die versuchen, dieses Problem zu lösen, die form helper und bean-fields. Wenn jemand Erfahrung damit hat, würde ich sehr daran interessiert sein, von ihnen zu hören. Alternativ, wenn es andere Lösungen/Plugins gibt, lass es mich wissen.

Danke. Don

Antwort

5

Verwenden Sie die . Ihr Code wird geworden:

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

Können Sie eine Dryer Lösung finden?

+1

@ sudhir die Antwort ist DRYer, da das Grails Fields-Plugin all dies mit tun wird ein einzelnes Tag – cdeszaq

5

Ja, Bohnenfelder Plugin ist sehr trocken ... Ihre 20 Zeilen mit einer Zeile ersetzt werden kann:

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

(Sie haben i18n Eigenschaften festlegen Unter der Annahme)

8

Für diejenigen, die diesen Thread gelesen in Zukunft - Für Grails 2.x Zweig Grails fields Plugin ist über Bean-Felder empfohlen, seine tatsächliche Nachfolger von Bean-Felder und bietet Flexibilität zum Überschreiben von Standard-Vorlagen

+1

Ich habe nie realisiert, dass ich bis jetzt in der Zukunft lebte :) – David