我错过了一些东西......
我有一个 Grails 网络流程,如下所示:-
def childFlow = {
start {
action {
def targets = []
Target.list().each {target ->
targets.add(new TargetCommand(name: target.name, id: target.id))
}
log.debug "targets are $targets"
[children: targets]
}
on('success').to('selectChild')
}
...
TargetCommand 是可序列化的。但我收到此错误:-
Caused by: java.io.NotSerializableException: com.nerderg.groupie.donate.Target
出于某种原因,Target.list().each {} 闭包内的“目标”对象被放入流作用域中,但我不知道如何将其标记为 transient 。
我在服务中有一些代码,当我不希望它们也放置在流范围中时,这些对象也被放置在流范围中。
如何阻止将闭包中的局部 transient 变量放入流作用域中?
最佳答案
完善上述答案,而不是清除 persistenceContext,我们只是在完成实例时将其逐出,如下所示:
Target.list().each {
targets.add(new TargetCommand(name: it.name, id: it.id))
flow.persistenceContext.evict(it)
}
这仍然是无法将闭包变量标记为 transient 的解决方法
关于Grails Webflow - 将事物保持在流程范围之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1691853/