#grails
#grails
Вопрос:
Доброе утро всем,
У меня есть вопрос новичка относительно grails. Заранее большое спасибо за то, что помогли мне понять!
Я не понимаю коды в контроллере и представление, сгенерированное командой generate-all .
Это действие сохранения в контроллере книги.
try {
bookService.save(book)
} catch (ValidationException e) {
respond book.errors, view:'create'
return
}
Я продолжаю читать руководство снова и снова, но я просто не понимаю их терминов. Я не знаю, что ответить на данный момент. Я предполагаю, что ответ ОТПРАВИТ объект errors внутри book в представление create.
Это коды в представлении создания.
<g:hasErrors bean="${this.book}">
<ul class="errors" role="alert">
<g:eachError bean="${this.book}" 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>
Итак, ${this.book} должно быть NULL . Я не вижу, что представление ищет $ {this.errors}, чтобы получить сообщение об ошибке, отправленное контроллером. Я не получаю после того, как объект ошибок отправляется в представление, откуда ${error.field} .
Спасибо!!!
Ответ №1:
Хорошо, я понял это. Контроллер привязывает объект book.errors к представлению create.
respond book.errors, view:'create'
Однако представление не использует объект book.errors для отображения ошибки сохранения.
<g:eachError bean="${this.book}" var="error">
${this.book} не является book.errors . Изначально я так и думал.book — это указатель, указывающий на book.errors . Я был неправ.
$ {this.book} — это объект book, определенный в контроллере. Представление вообще не использует объект book.errors.