【发布时间】:2013-05-22 17:36:09
【问题描述】:
所以我的问题是,在我可以在页面上呈现它们之前,我的验证错误已从我的域对象中删除。我以为我过去已经修复了这个错误,但它又悄悄出现在我身上。
这是我最初的实现。调用tripService.stepData(trip) 时正在清除错误。
编辑 - 我不应该只在页面添加到 hasMany 关系时遇到此问题。
控制器 -
Trip trip = tripService.savePrePaymentInfo(params)
if (trip.hasErrors()) {
render(view: "step4", model: tripService.stepData(trip))
}
else {
redirect(action: trip.status.action, id:trip.id)
}
服务 -
Map stepData(Trip trip)
{
Map returnSet = [:]
returnSet.status = Status.findAllByActionNotEqual("review")
returnSet.trip = trip
returnSet
}
所以我在网上做了一些阅读,有人在 2 年前的论坛帖子上说休眠中有一些东西......可能的错误......我不知道,但他们的建议奏效了。建议是将控制器包装在 withTransaction:
Trip.withTransaction {
//Controller code here
}
这对我来说一直很好。现在的问题是我认为我有一个标记库,它再次调用tripService。进行该调用时,它现在正在清除我的验证错误。这真是令人沮丧。有没有人知道我可以做些什么来解决这个问题?
编辑:添加从 taglib 调用的服务方法:
String findBannerName(Long pidm, String format = 'LFMI')
{
"abc"
//It really doesnt matter what is here - tried just returning this string and it produced the issue
}
【问题讨论】:
-
可能是因为您的服务是事务性的,即使
stepData()不是?如果将 setpData 声明为非事务性会发生什么? -
你能声明服务方法是非事务性的,而不让整个服务都这样吗?
-
我认为唯一可行的方法是将服务设置为事务性 false 并注释必须是事务性的方法。
-
好的,我试一试 - 很快就会报告
-
好的,我只将更新数据库的方法标记为事务性的,它似乎正在工作。将您的评论放在答案中,我会将其标记为已接受,但是,我真的很想知道为什么会这样。
标签: spring hibernate validation grails grails-services