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

Grails use Command Object and object in the same gsp

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

有什么方法可以在同一个表格中同时使用两者吗?或者我在这里缺少什么。

用户控制器 class

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>

您应该在两个操作参数上使用 UserCommand,并通过 data binding 在 UserCommand 的操作中创建您的用户对象。这是为了将您的视图模型与实际模型分开。

如其他用户所述,return 整个 UserCommand 而不是 UserCommand.errors。您也可以在视图中访问 UserCommand.errors

请记住,在您的 UserCommand 有效后,您仍然需要创建 User 并对其进行验证,return 它有任何错误。例如,两者都可以是 运行 到 <g:renderErrors bean="${user}">

谢谢@tuomas-valtonen。你驱使我找到解决方案。

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