Грааль визуализации шаблона

У меня есть это <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"> который должен был отображать все ошибки домена, который нарушает ограничения домена.

2 ответа

Решение

Если это весь код, который вы показываете, ваша главная проблема в том, что вы не звоните .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])
  }  
}

Просто быстрый взгляд на код, так что, возможно, я пропускаю одно из многих соглашений Grails, но вы передаете методу визуализации userInstance с 'bean' в качестве ключа карты. И затем, ссылаясь на него как ${userInstance}. Попробуйте обозначить его как ${bean} внутри Темплеты или передать как:

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

Это не ответ на ваш вопрос, просто дополнительный совет: вы можете использовать тег g:renderErrors внутри вашего шаблона ошибки или даже вместо него.

Другие вопросы по тегам