- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Grails Controller 内执行更新操作时遇到问题。
当我提交密码(或其确认信息)已更改的表单时,我希望对其进行验证,如果未得到很好的确认,我应该拒绝该表单并警告用户。我正在尝试遵循 Grails 文档说明(http://grails.org/doc/latest/ref/Domain%20Classes/errors.html)。
当我仅更改密码或其确认时,一切正常。
但是当我更改表单中的密码以外的其他内容时,问题就出现了,即使验证密码的 block 显然执行得很好,对象(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)
}
最佳答案
我认为您的 userInstance
已保存,因为成功操作后会自动刷新。如果密码不匹配,请尝试在 return 语句之前使用 userInstance.discard()
。这样您就可以将此实例与 Hibernate 分离,并且在执行操作后它不会被保存。
关于Grails 错误?更新操作忽略rejectValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11988458/
我的域对象预订具有多个允许为空的属性,因为它们将在对象保存到数据库后稍后设置。 myService.action() 的一部分: booking.properties = params if (
我的 TestValidator 中有我的验证方法,如下所示 @Override public void validate(Object target, Errors errors) { Te
我想传递 ResourceBundle 的 (globalmessage.properties) 属性名称“atm.number”而不是硬编码文本“Número de cajero”作为“errors
我试图理解以下之间的区别: void addError(ObjectError error)(来自org.springframework.validation.Errors) voidrejectVa
我是一名优秀的程序员,十分优秀!