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

时间:2018-08-09 02:34:19

标签: grails gsp grails-controller command-objects

我有一个控制器,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>

when call edit method, I get the user info

Update with errors, I got lost the user info

2 个答案:

答案 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
    }