2010-01-25 48 views
5

當使用Grails時,GSP代碼來呈現每個表單域看起來是這樣的:幾乎一模一樣的5行GSP/HTML代碼重複每個窗體使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> 

公告領域。這對我來說似乎不是很乾,我想知道其他人是否找到了更好的方法?

我發現了2個試圖解決這個問題的插件,form helperbean-fields。如果任何人有使用這兩種方法的經驗,我會非常有興趣聽到他們的消息。或者,如果有其他解決方案/插件,請告訴我。

謝謝。 Don

回答

5

使用bean-field plugin。 您的代碼將變爲:

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

你能找到一個解決機?

+1

@ sudhir的答案是DRYer,因爲Grails Fields插件將完成所有這些一個標籤。 – cdeszaq 2012-04-19 12:25:49

5

是,豆田插件很乾...您的20日線可以用一條線來代替:

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

(假設你有國際化的屬性設置)

8

對於那些誰在閱讀此線程未來 - 對於Grails 2.x分支Grails fields插件推薦使用bean字段,它是bean字段的實際繼承者,並提供了靈活性來覆蓋默認模板

+1

我從來沒有意識到我住在未來,直到現在:) – David 2012-04-19 07:36:34