我在控制器中进行了自定义验证,因为我需要使用数据库进行验证。
public void SendData(List<SomeClass> ajaxData)
{
var data = ajaxData;
}
public class SomeClass
{
public int Id { get; set; }
public int RoleId { get; set; }
public bool R { get; set; }
public bool W { get; set; }
public bool E { get; set; }
public bool D { get; set; }
}
在上面的代码中,即使def update(Object instance) {
if (instance == null) {
notFound()
return
}
if (instance.hasErrors()) {
//redirect code here
return
}
def obj = objService.someMethod()
//some validation code here
if(someCheck){
// if i discard it wont work
instance.discard()
flash.error = message(code: 'message.code')
//render code here
return
}
在执行数据库访问后也不起作用。即使没有保存方法调用,也会自动保存更改的数据。如果没有执行数据库访问,则相同的instance.discard()
将起作用。如果验证失败,如何丢弃要保留到数据库的更改值。
答案 0 :(得分:0)
在@Transactional(readonly = true)
操作上方添加注释update
。这应该够了吧。
这是Grails的内置功能,可以自动将实例持久保存到数据库中。
请在此处阅读我的回答以获取更多详细信息 https://stackoverflow.com/a/32659803/2405040