Грааль визуализации шаблона
У меня есть это <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 внутри вашего шаблона ошибки или даже вместо него.