Grails использует Command Object и объект в одном GSP
У меня есть контроллер, способ редактирования рисует информацию о пользователе в файле формы. Но когда я пытаюсь выполнить обновление с ошибками, командный объект возвращает объект userCommand, поэтому я потерял всю информацию из пользовательского объекта.
Есть ли способ использовать оба в одной форме? или что мне здесь не хватает.
Класс UserController
class UserController {
def edit(User user) {
respond user
}
def update(UserCommand userCommand) {
log.debug "Update a User"
if (userCommand.hasErrors()) {
respond userCommand.errors, view: 'edit'
return
}
}
}
_form.gsp файл
<g:form action="update">
<div class="form-group">
<label for="firstName">User First Name</label>
<input class="form-control" name="firstName" value="${user?.firstName}">
</div>
<div class="form-group">
<label for="lastName">User Last Name</label>
<input class="form-control" name="lastName" value="${user?.lastName}">
</div>
</g:form>
2 ответа
Спасибо @tuomas-valtonen. Вы водите меня, чтобы найти решение.
def edit(User user) {
UserCommand userCommand = new UserCommand()
bindData(userCommand, user)
respond userCommand
}
Вы должны использовать UserCommand
на оба параметра действий и создать свой пользовательский объект внутри действия из UserCommand с помощью data binding
, Это должно отделить вашу модель представления от фактической модели.
Как и другие заявленные пользователи, вернуть все UserCommand
вместо UserCommand.errors
, Вы можете получить доступ UserCommand.errors
в представлении также.
Помните, что после того, как ваша UserCommand действительна, вам все равно нужно создать пользователя, проверить его и вернуть все ошибки, которые у него есть. Оба могут быть запущены <g:renderErrors bean="${user}">
например.