我有<g:formRemote>
这个属性,
<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>
一旦提交进入具有这些代码行的封闭,
def actionAJAX() {
def userInstance = new User(params)
render(template:"error", bean:userInstance)
}
_error.gsp
将包含bean错误的脚手架显示,其中违反了域约束(可空,空白等)。它看起来像这样:
<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
问题是我无法在def userInstance = new User
上显示bean [_error.gsp
]的错误。该方案仅保留_form.gsp
的所有字段(具有generate-view
的内容并删除所有required
属性)但在提交时,仅返回message
<div id="formMessage">
预计会显示违反域约束的域的所有错误。
答案 0 :(得分:0)
只需快速查看代码,也许我错过了许多Grails约定中的一个,但是您将使用'bean'作为map键的userInstance传递给render方法。然后将其称为$ {userInstance}。尝试将它作为$ {bean}在templeta中引用或传递给它:
render(template:"error", userInstance:userInstance)
这不是您的问题的答案,只是一个额外的提示:您可以在错误模板中使用g:renderErrors tag,甚至可以代替它。
答案 1 :(得分: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])
}
}