0

我有这个<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_error.gsp. 该场景只是留下所有字段_form.gsp(具有的内容generate-view并删除所有属性),但在required提交时,闭包仅返回预期显示违反域约束的域的所有错误。message<div id="formMessage">

4

2 回答 2

0

只是快速浏览一下代码,所以也许我错过了许多 Grails 约定之一,但是您将使用 'bean' 作为映射键的 userInstance 传递给 render 方法。然后将其称为 ${userInstance}。尝试在模板中将其称为 ${bean} 或像这样传递它:

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

这不是您问题的答案,只是一个额外的提示:您可以在错误模板中使用g:renderErrors 标记,甚至可以代替它。

于 2012-09-11T11:24:58.473 回答
0

如果这就是您显示的所有代码,那么您的主要问题是您没有调用.validate()or .save()。您必须调用其中任何一个来获取对象中的错误。

def actionAJAX() {
  User userInstance = new User(params)
  if ( !user.save() )
  {
      render(template:"error", model:[userInstance: userInstance])
  }
  else
  {
      render(template:"success", model:[userInstance: userInstance])
  }  
}
于 2012-09-11T12:28:16.563 回答