我有一个域用户,有很多队列。添加和显示队列工作正常,但是当我从用户删除队列时,该队列被删除,但仍显示在浏览器中。仅当我注销并再次登录时, View 才会刷新。
我删除它们的地方:
def user = session?.user
def queue = Queue.findById(params.queueId)
if(queue){
user.removeFromQueues(queue)
queue.delete(flush:true)
flash.message = "deleted queue with id: ${queue.id}"
redirect(controller:'queue', action:'index')
}
并以这种方式显示:
<g:each in="${session?.user?.queues}">
<div id="queue">
${it.name} id:${it.id}
<div id='queueButtons'>
<g:hiddenField name="queueId" value="${it.id}" />
<g:link controller='queue' action='delete' params="[queueId: "${it.id}"]">X</g:link>
</div>
</div>
</g:each>
为什么用户不刷新?当我向用户添加队列时,它将立即显示。有没有一种刷新用户/ session 的方法?
最佳答案
如评论中所述,将用户域实例保留在 session 中不仅是一个非常糟糕的主意,而且是导致问题的原因。
您在 session 中的用户实例未附加到休眠 session ,因此不会被更新。
重新设计/重构您的代码,以仅保留 session 中的最少信息(用户ID是个好主意),然后再去那里。尝试在 session 中投入过多,可能会给自己带来更多的问题,而要解决的问题只会越来越多,而如果您继续沿着这一道路前进,事情只会变得更糟。
关于grails - Grails域对象未在gsp中刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28275872/