2012-09-11 148 views
0

我有這個<g:formRemote>具有這種屬性,Grails的渲染模板

<g:formRemote name="innerForm" id="innerForm" 
       url="[controller:'user', action:'actionAJAX']" 
       update="formMessage"> 
    <div id="formMessage">Fill up the fields</div> 
    <g:render template="form" bean="${newUser}" /> 
    <div class="buttons"> 
    <g:submitButton name="Create User"/> 
    <input type="reset" value="Cancel"/> 
    </div> 
</g:formRemote> 

,其在提交procceeds具有這段代碼線閉合,

def actionAJAX() { 
    def userInstance = new User(params) 
    render(template:"error", bean:userInstance) 
} 

_error.gsp將包含豆錯誤的支架展示在這違反了域約束(可爲空的,空白等)。它應該是這樣的:

<g:hasErrors bean="${userInstance}"> 
    <ul class="errors" role="alert"> 
    <g:eachError bean="${userInstance}" var="error"> 
     <li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li> 
    </g:eachError> 
    </ul> 
</g:hasErrors> 
message 

的問題是,我不能顯示在_error.gsp豆[def userInstance = new User]的錯誤。該場景僅留下_form.gsp的所有字段(具有generate-view的內容併除去所有required屬性),但是在提交時,僅在<div id="formMessage">上返回message,其預期顯示違反該域的所有錯誤域限制。

回答

0

如果這是您顯示的所有代碼,那麼您的主要問題是您沒有撥打.validate().save()。您必須調用其中一個來獲取對象中的錯誤。

def actionAJAX() { 
    User userInstance = new User(params) 
    if (!user.save()) 
    { 
     render(template:"error", model:[userInstance: userInstance]) 
    } 
    else 
    { 
     render(template:"success", model:[userInstance: userInstance]) 
    } 
} 
+0

我應該注意 - 您將在不調用保存或驗證的情況下得到綁定錯誤。我的錯。 –

0

只是快速看一下代碼,所以也許我失去了很多Grails的公約之一,但你傳遞給渲染方法userInstance與「豆」作爲地圖的關鍵。然後將其稱爲$ {userInstance}。嘗試參照它作爲$ {豆}的templeta內部或通過它想:

render(template:"error", userInstance:userInstance) 

這不是你的問題,只是一個額外的小費一個答案:你可以使用g:renderErrors tag您的錯誤模板中,甚至代替它。