2012-06-08 47 views
16

Grails 2.0.4 documentation進行驗證展示瞭如何在頁面的頂部以及如何將CSS類爲一個元素添加一個字段是無效的顯示錯誤消息,但它不會告訴你如何顯示錯誤消息旁邊字段本身,這樣的事情:在Grails中,如何在字段旁邊顯示驗證錯誤消息?

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

你如何獲取特定的錯誤消息無效的域,然後在它旁邊是用於顯示設備領域呢?

+0

這一切都在您的視圖的HTML。查看腳手架模板以查看默認渲染。您可以修改它們以在任何地方顯示字段錯誤。答案中提到的字段插件已經這樣做了。 – aldrin

+0

我創建了關於如何創建一個自定義的驗證和發佈自定義錯誤消息回到你的觀點在這裏詳細的解答:http://stackoverflow.com/questions/14038905/how-do-i-create-a-custom -validator -with-a-custom-error-message-in-grails/14038908#14038908 – Spider

回答

11

事實上,文件並展示瞭如何做到這一點,它只是不是太清楚,這是他們的意思:

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

如果指定屬性,它只會渲染錯誤(s)爲該領域。那麼就由你來編寫相應的HTML。

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

它可以變得簡單或複雜,因爲你會喜歡它,而我一般喜歡Grails插件,這只是似乎很簡單沒有一個做的,你必須在標記更多的控制。

+0

謝謝格雷格。這是我正在尋找的。 –

+0

如果該字段未鏈接到bean,該怎麼辦?假設你創建一個只有一個字段來搜索某個實體的gsp ...我該如何顯示錯誤? – FrancescoDS

7

我使用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> 
+0

非常棒!肯定會嘗試字段插件。 – Kimi

1

我會建議用Jquery validation plugin去。這裏有幾個Grails插件,但它們有點過時了。此外,我認爲這個任務對於使用另一個插件非常簡單。

4

這裏是環繞用戶名字段的自定義錯誤。這將做你想要的。

<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> 
相關問題