我有一个控制器,edit方法将用户信息绘制在表单文件中。但 当我尝试更新错误时,命令对象返回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>
答案 0 :(得分:3)
您应该在两个动作参数上使用UserCommand
,并通过data binding
在UserCommand中的动作内部创建User对象。这是为了将您的View模型与实际模型分开。
和其他用户一样,返回整个UserCommand
而不是UserCommand.errors
。您也可以在视图中访问UserCommand.errors
。
请记住,在UserCommand有效后,您仍然需要创建User并对其进行验证,并返回它所存在的任何错误。例如,两者都可以通过<g:renderErrors bean="${user}">
运行。
答案 1 :(得分:-2)
谢谢@ tuomas-valtonen。您驱使我寻找解决方案。
def edit(User user) {
UserCommand userCommand = new UserCommand()
bindData(userCommand, user)
respond userCommand
}