Grails渲染模板

时间:2012-09-11 02:51:24

标签: ajax grails grails-domain-class

我有<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">预计会显示违反域约束的域的所有错误。

2 个答案:

答案 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])
  }  
}