0

我有一个非常简单的 gsp 页面,其中包含对象列表,并且可以通过单击一行来编辑每个对象。单击一行后,我通过 AJAX 调用获取相应的数据,并在表格下方的一些文本字段中显示详细信息。

然后我单击“更新”按钮,导致另一个 AJAX POST 请求将数据发送到相应的控制器,如下所示:

def update(Role roleInstance) {
    if (roleInstance == null) {
        notFound()
        return
    }

    if (roleInstance.hasErrors()) {
        response.status = 420
        render template: "editForm", model: [roleInstance: roleInstance]
        return
    }

    roleService.update(roleInstance)

    flash.message = message(code: 'default.updated.message', args: [message(code: 'aedb.role.label'), roleInstance.authority])
    render template: "roleTable", model: [roleInstanceList:Role.list()]
}

一切似乎都很好 - 域对象在数据库中正确更新。

只有一件事我不明白:每次我单击表中的一行以获取数据时,更改某些内容,然后单击更新按钮,我得到StaleObjectStateException. 如果再次单击更新按钮,则更新成功,没有问题。

目前,我正在使用saveRoleService 的方法保存对象。在此之前,我尝试使用roleInstance.save flush:true. 但是,当我对同一个对象进行两次更新时,我得到了同样的错误。

编辑:

edit按照我的行动来源RoleController

def edit(Role roleInstance) {
    if (roleInstance == null) {
        notFound()
        return
    }

    def notAssignedPermissions = Permission.list() - roleInstance.getPermissions()
    render template: "editForm", model: [roleInstance: roleInstance, notAssignedPermissions: notAssignedPermissions]
}

就我RoleService而言,这是一个非常简单的类:

@Transactional
class RoleService {

    @Transactional(readOnly = true)
    def getRole(id) {
        Role.get(id)
    }

    @Transactional
    def update(role) {
        role.save()
    }
}
4

0 回答 0