2014-01-10 26 views
0

您好我正在使用grails。我的要求是在每個用戶的整個應用程序中獲得一個對象,直到用戶的會話可用。在以用戶身份登錄後啓動我的應用程序之後,在會話中放入了一個對象。Grails從會話中的已存檔實例中獲取空值

Object object = Object.findById(idName) 
session.object = object 

在控制器中,當我需要這個對象時,我只寫這個語法。

Object object = session.object 

有時我也會用這個語法得到那個對象。

Object object = Object.findById(session.object?.id) 

有時他們返回確切的對象,有時它返回null。 我沒有得到我犯錯的地方。

+0

絕對不應該接收upvotes一個問題在所有控制器可用。不清楚,額外的問題導致user1791574聲明中出現矛盾,沒有顯示任何研究工作! – lukelazarovic

回答

0

爲每個應用程序用戶跟蹤會話 - 當您在某個用戶的會話中放入某個用戶時,它只出現在他的會話中,其他會話保持不變。

從你所說的話,你想要該對象在應用程序範圍內呈現。爲此,您可以使用servletContext - http://grails.org/doc/latest/ref/Controllers/servletContext.html

在引導您可以使用它像這樣:

def init = { 
    servletContext -> 

    Object object = Object.findById(idName) 
    servletContext.setAttribute('myObject', object) 
} 

,對象將通過

servletContext.getAttribute('myObject') 
+0

我不想在整個應用程序中反對。我只需要爲每個用戶單獨使用它。我編輯了我的問題。請看一下。 – user1791574

+0

然後問題很明顯 - 你怎麼能在應用程序啓動時將對象放入用戶會話?在那一刻用戶會話還不存在 - 當用戶第一次訪問你的應用程序時,爲用戶創建會話。那麼我會更新我的答案。 – lukelazarovic

+0

我在登錄用戶後放置了對象會話。 – user1791574