【问题标题】:In Grails, how do I display validation error messages next to the fields?在 Grails 中,如何在字段旁边显示验证错误消息?
【发布时间】:2012-06-12 04:59:56
【问题描述】:

用于验证的Grails 2.0.4 documentation 向您展示了如何在页面顶部显示错误消息以及如何在字段无效时向元素添加 css 类,但它没有告诉您如何显示错误字段本身旁边的消息,如下所示:

      -----------------------
Name: |                     |  You must enter a name!
      -----------------------

如何检索无效字段的特定错误消息,然后将其显示在它所针对的字段旁边?

【问题讨论】:

  • 这一切都在您的视图的 HTML 中。查看脚手架模板以查看默认渲染。您可以修改它们以在您希望的任何位置显示字段错误。答案中提到的字段插件已经做到了。
  • 我已经创建了关于如何创建自定义验证并将自定义错误消息发布回您的视图的详细答案:stackoverflow.com/questions/14038905/…

标签: validation grails grails-2.0


【解决方案1】:

实际上,文档确实显示了如何做到这一点,只是不太清楚这就是他们的意思:

<g:renderErrors bean="${book}" as="list" field="title"/>

如果您指定 field 属性,它只会为该字段呈现错误。因此,您可以相应地编写 HTML。

<input type="text" ... /> <g:if test="${bean.hasErrors}"><g:renderErrors bean="${book}" as="list" field="title"/></g:if>

它可以随心所欲地变得简单或复杂,虽然我通常喜欢 grails 插件,但这似乎很简单,无需使用它,您可以更好地控制标记。

【讨论】:

  • 谢谢格雷格。这就是我一直在寻找的。​​span>
  • 如果字段没有链接到bean怎么办?假设您创建了一个只有一个字段来搜索某个实体的 gsp……我如何在其中显示错误?
【解决方案2】:

我使用Grails Fields plugin 来执行此操作,它很管用。

它可以轻松创建用于表单字段呈现的默认模板。例如我在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>

【讨论】:

  • 太棒了!肯定会尝试字段插件。
【解决方案3】:

这是上下文中的自定义错误,包含在用户名字段周围。这会做你想做的。

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

【讨论】:

    【解决方案4】:

    我建议使用Jquery validation plugin。有几个关于此的 Grails 插件,但它们有点过时了。此外,我认为这个任务对于使用另一个插件来说非常简单。

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 2014-10-30
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      相关资源
      最近更新 更多