我在 Grails 控制器中的更新操作有问题。
当我提交更改密码(或其确认)的表单时,我希望对其进行验证,如果没有得到很好的确认,我应该拒绝该表单并警告用户。我正在尝试遵循 Grails 文档说明(http://grails.org/doc/latest/ref/Domain%20Classes/errors.html)。
当我只更改密码或其确认时,一切正常。
但是当我更改表单中的密码时出现问题,即使验证密码的块显然执行得很好,对象(userInstance)仍然会更新。而且,不仅其他数据被持久化,而且是“错误确认”的密码。
我试图在下面的示例代码中插入一些“printlns”来说明会发生什么。我正在使用 Grails 2.0.0 并在 IntelliJ 11.1.3 中进行调试(如果有帮助的话)。
我希望已经足够清楚了。
感谢您的任何回答。
def update() {
...
if (params.password != params.confirmPassword) {
println("This message is correctly printed when passwords differ.")
userInstance.errors.rejectValue('password',
'defaut.password.diff.message',
'Password confirmation is incorrect!')
render(view: "edit", model: [userInstance: userInstance])
return
}
println("This message is correctly NOT printed when passwords differ.")
println("But 'userInstance' object is updated in DB anyways. :( ")
if (!userInstance.save(flush: true)) {
render(view: "edit", model: [userInstance: userInstance])
return
}
flash.message = message(code: 'default.updated.message', args: [message(code: 'utilisateur.label', default: 'Utilisateur'), utilisateurInstance.id])
redirect(action: "show", id: utilisateurInstance.id)
}