Grails在同一gsp中使用命令对象和对象

Grails在同一gsp中使用命令对象和对象,grails,gsp,grails-controller,command-objects,Grails,Gsp,Grails Controller,Command Objects,我有一个控制器,编辑方法在表单文件中绘制用户信息。但是 当我试图用错误更新命令对象时,命令对象返回userCommand对象,因此我丢失了用户对象的所有信息 有没有办法以相同的形式使用两者?或者我在这里错过了什么 用户控制器类 class UserController { def edit(User user) { respond user } def update(UserCommand userCommand) { log.debug

我有一个控制器,编辑方法在表单文件中绘制用户信息。但是 当我试图用错误更新命令对象时,命令对象返回userCommand对象,因此我丢失了用户对象的所有信息

有没有办法以相同的形式使用两者?或者我在这里错过了什么

用户控制器类

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>

用户名
用户姓氏


您应该在两个actions参数上使用
UserCommand
,并通过
数据绑定
从UserCommand在action中创建用户对象。这是为了将视图模型与实际模型分开

与其他用户一样,返回整个
UserCommand
,而不是
UserCommand.errors
。您可以访问视图中的
UserCommand.errors


请记住,在UserCommand有效之后,仍然需要创建用户并验证它,并返回它所存在的任何错误。例如,这两种方法都可以通过
运行。

谢谢你@tuomas valtonen。你驱使我找到解决办法

def edit(User user) {
        UserCommand userCommand = new UserCommand()
        bindData(userCommand, user)
        respond userCommand
    }

您是否尝试仅响应userCommand而不是userCommand。错误?是的,我响应了。相同的结果hh:)而不是用户?.firstName尝试使用userCommand?.firstName