制作Grails形成开发DRYer

Dón*_*nal 5 grails groovy webforms grails-plugin

使用Grails时,呈现每个表单字段的GSP代码如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

请注意,每个表单字段重复几乎完全相同的5行GSP/HTML代码.这对我来说似乎不太干,我想知道其他人是否找到了更好的方法?

我找到了2个试图解决这个问题的插件,表单助手bean字段.如果有人有使用其中任何一种的经验,我会非常有兴趣听取他们的意见.或者,如果有其他解决方案/插件,请告诉我.

谢谢.唐

Sud*_*r N 8

对于那些将来阅读这个主题的人 - 对于grails 2.x分支Grails字段插件建议使用bean字段,它实际上是bean字段的后继者,并提供了覆盖默认模板的灵活性


fab*_*474 5

使用bean-field插件.您的代码将变为:

<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>
Run Code Online (Sandbox Code Playgroud)

你能找到DRYer解决方案吗?


k s*_*k s 5

是的,bean-fields插件很干......你的20行可以换成一行:

<bean:form beanName="person" properties="username, userRealName, passwd”/>
Run Code Online (Sandbox Code Playgroud)

(假设你设置了i18n属性)