0

我有一个控制器,编辑方法在表单文件中绘制用户信息。但是当我尝试更新错误命令对象返回 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>

当调用编辑方法时,我得到用户信息

更新错误,我丢失了用户信息

4

2 回答 2

3

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

像其他用户所说,返回整个UserCommand而不是UserCommand.errors. 您也可以UserCommand.errors在视图中访问。

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

于 2018-08-09T09:49:32.440 回答
-2

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

def edit(User user) {
        UserCommand userCommand = new UserCommand()
        bindData(userCommand, user)
        respond userCommand
    }
于 2018-08-22T01:38:43.777 回答