Grails 域对象在 gsp 中不刷新
Grails domain object not refreshing in gsp
我有一个域用户,它有很多队列。添加和显示队列工作正常,但是当我从用户删除队列时,队列被删除,但仍显示在浏览器中。只有当我注销并再次登录时才会刷新视图。
我在哪里删除它们:
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>
为什么用户没有刷新?当我向用户添加队列时,它会立即显示。有没有办法刷新 user/session?
如评论中所述,将用户域实例保留在 session 中不仅是一个非常糟糕的主意,而且还是导致您出现问题的原因。
您在 session 中的用户实例未附加到休眠 session,因此未更新。
Redesign/Refactor 您的代码仅在 session 中保留最少的信息(用户 ID 是个好主意),然后从那里开始。试图在 session 中投入太多,你给自己造成的问题比你解决的问题还多,如果你继续沿着这条路走下去,事情只会变得更糟。
我有一个域用户,它有很多队列。添加和显示队列工作正常,但是当我从用户删除队列时,队列被删除,但仍显示在浏览器中。只有当我注销并再次登录时才会刷新视图。
我在哪里删除它们:
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>
为什么用户没有刷新?当我向用户添加队列时,它会立即显示。有没有办法刷新 user/session?
如评论中所述,将用户域实例保留在 session 中不仅是一个非常糟糕的主意,而且还是导致您出现问题的原因。
您在 session 中的用户实例未附加到休眠 session,因此未更新。
Redesign/Refactor 您的代码仅在 session 中保留最少的信息(用户 ID 是个好主意),然后从那里开始。试图在 session 中投入太多,你给自己造成的问题比你解决的问题还多,如果你继续沿着这条路走下去,事情只会变得更糟。