Grails域对象在gsp中没有刷新

时间:2015-02-02 10:42:20

标签: grails gsp grails-domain-class

我有一个域用户,有很多队列。添加和显示队列工作正常,但是当我从用户删除队列时,队列将被删除,但仍会显示在浏览器中。仅当我注销并再次登录时才会刷新视图。

我删除它们的地方:

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>

为什么用户没有刷新?当我向用户添加队列时,它会立即显示。有没有办法刷新用户/会话?

1 个答案:

答案 0 :(得分:1)

正如评论中所述,在会话中保留用户域实例不仅是一个非常糟糕的主意,它是导致问题的原因。

会话中的用户实例未附加到hibernate会话,因此未进行更新。

重新设计/重构您的代码,以便在会话中保留最少的信息(用户ID是一个好主意)并从那里开始。你为自己造成的问题多于解决问题,试图在会话中投入太多,如果你继续沿着这条路走下去,情况会变得更糟。