gpt4 book ai didi

grails - 在 grails 3 中,使用命令对象,你如何不更新说密码字段?

转载 作者:行者123 更新时间:2023-12-02 15:17:01 26 4
gpt4 key购买 nike

如果您有一个简单地调用 user.save() 的服务方法 save(User user),如果用户说编辑了他的地址,您如何阻止它用空值覆盖密码(或者如果它为空则验证失败)?密码不会发送到更新 View 。在过去,我们曾经有这样的事情:

def update(Map params) {
params.remove("password")
player.properties = params
player.save()
}

现在我们有了这个:
   interface IUserService {
User get(Serializable id)
List<User> list(Map args)
Long count()
void delete(Serializable id)
User save(User user)
User update(User user)
}

@Service(User)
@Transactional
abstract class UserService implements IUserService {
@Override
User update(User user) {
user.save() // this will overwrite the password, or fail if the password is null.
}

params.remove 的新等效项是什么?我们如何在更新对象时不更新密码?我想我们可以从数据库中读取当前密码,并在保存之前将其分配给传入的对象,但这是另一个读取。或者我们可以编写一些自定义 sql 来更新每个字段,但不更新我们想要屏蔽的字段?

最佳答案

您可以使用 bindable 将属性配置为不参与批量属性绑定(bind)。约束。

class User {
String username
String password

static constraints = {
password bindable: false
}
}

现在数据绑定(bind)器将排除 password数据绑定(bind)过程中的属性,您可以决定何时/是否更新该属性。你可以这样做 per.password = params.password (或类似的)每当您想更新密码时。

关于grails - 在 grails 3 中,使用命令对象,你如何不更新说密码字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com