客户端上的 Grails 表单验证

Grails form validation on client

我有以下域 class 和 gsp,但似乎无法在客户端 gsp 端进行验证。

域名class:

class User {
   String username
   String password
   String emailAddress
   static hasMany = [memberships: Membership]
}

表格 gsp:

<div class="error-details">
   <g:hasErrors bean="${user}">
       <ul>
           <g:eachError var="err" bean="${user}">
              <li>${err}</li>
           </g:eachError>
       </ul>
   </g:hasErrors>
</div>
<form action="${raw(createLink(controller:'purchase', action: 
'createSubscription'))}" method="POST">
   <input type="text" name="username">
   <input type="text" name="password">
   <input type="text" name="emailAddress">
</form>

有什么我遗漏的吗?

您应该使用内置的 Taglibs 来呈现字段。不要使用标准 HTML。这样您就可以让 Grails 根据您的域 class 确定约束。

您没有指定您使用的 grails 版本 运行:

最新版本3.3.x使用了fields插件,请看https://grails-fields-plugin.github.io/grails-fields/latest/ref/Tags/field.html

<f:field bean="user" property="username"/>
<f:field bean="user" property="password" />
<f:field bean="user" property="emailAddress"/>

或者只使用这个

<f:all bean="user"/>

这将呈现用户的所有属性。

确保更新您的域并包含以下限制条件

static constraints = {
     password password: true
}

可能存在其他限制。请参阅 https://docs.grails.org/latest/ref/Constraints/Usage.html

在旧版本的 grails 中,请参阅 https://grails.github.io/grails2-doc/2.4.3/ref/Tags/field.html

<g:field type="text" name="username" value="${userInstance?.username}"/>
<g:field type="password" name="password" value="${userInstance?.password}"/>
<g:field type="text" name="username" value="${userInstance?.username}"/>