2012-09-11 73 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您的错误模板中,甚至代替它。