Grails 2.0.4 验证文档向您展示了如何在页面顶部显示错误消息以及如何在字段无效时向元素添加 css 类,但它没有告诉您如何显示错误消息在字段本身旁边,如下所示:
-----------------------
Name: | | You must enter a name!
-----------------------
如何检索无效字段的特定错误消息,然后将其显示在它所针对的字段旁边?
Grails 2.0.4 验证文档向您展示了如何在页面顶部显示错误消息以及如何在字段无效时向元素添加 css 类,但它没有告诉您如何显示错误消息在字段本身旁边,如下所示:
-----------------------
Name: | | You must enter a name!
-----------------------
如何检索无效字段的特定错误消息,然后将其显示在它所针对的字段旁边?
实际上,文档确实显示了如何做到这一点,只是不太清楚这就是他们的意思:
<g:renderErrors bean="${book}" as="list" field="title"/>
如果您指定字段属性,它只会呈现该字段的错误。因此,您可以相应地编写 HTML。
<input type="text" ... /> <g:if test="${bean.hasErrors}"><g:renderErrors bean="${book}" as="list" field="title"/></g:if>
它可以变得像你想要的那样简单或复杂,虽然我通常喜欢 grails 插件,但这似乎很简单,没有一个,你可以更好地控制标记。
我使用Grails Fields 插件来执行此操作,它很有效。
它使为表单字段呈现创建默认模板变得容易。例如,我有以下内容grails-app/views/_fields/default/_field.gsp
:
<%@ page defaultCodec="html" %>
<div class="control-group${invalid ? ' error' : ''}">
<label class="control-label" for="${property}${index ?: ""}">${label}</label>
<div class="controls">
<%= widget.replace("id=\"${property}\"", "id=\"${property}${index ?: ""}\"") %>
<g:if test="${invalid}"><span class="help-inline">${errors.join('<br>')}</span></g:if>
</div>
</div>
从 HTML 中可以看出,错误是内联显示的。这是我的登录表单的一部分:
<g:form controller="home" action="login" >
<f:field bean="user" property="email"/>
<f:field bean="user" property="password">
<g:field type="password" name="${property}" value="${value}"/>
</f:field>
</g:form>
这是上下文中的自定义错误,包含在用户名字段周围。这将做你想要的。
<dt>User Id</dt>
<dd><g:textField name="username" value="${user?.username}"/>
<g:hasErrors bean="${user}" field="username">
<g:eachError bean="${user}" field="username">
<p style="color: red;"><g:message error="${it}"/></p>
</g:eachError>
</g:hasErrors>
</dd>
我建议使用Jquery 验证插件。有几个关于此的 Grails 插件,但它们有点过时了。此外,我认为这个任务对于使用另一个插件来说非常简单。