2014-07-17 20 views
0

我想在src/groovy類中的函數A()內的會話中設置一個值,並在同一個src/groovy類的函數B()中使用該值。那可能嗎?由於它們被覆蓋,所以我無法傳遞函數之間的值。我引用了這個link,但並不完全理解實現。提前致謝。 編輯:這裏函數A是crawler4j的訪問函數,函數B是handlePageStatusCode()在src/groovy中使用會話

+1

。那沒有意義。你能澄清嗎? –

+0

我的意思是我不能改變函數原型。它們覆蓋了crawler4j的函數,因此我無法將這些值作爲函數參數傳遞。 –

+1

在使用方法之前,您不能只創建一個類屬性並指定它嗎? –

回答

1

我做了一個小的實用Java類來處理像src/groovy,src/java或grails-app/services這樣的地方訪問會話。你可以嘗試使用它:

public class SessionUtil { 

    /** 
    * Returns the current session. This can be used in classes where the session variable is not set by Grails, such as Services. 
    * @return the session 
    */ 
    public static GrailsHttpSession getSession() { 
     return WebUtils.retrieveGrailsWebRequest().getSession(); 
    } 
} 

要使用它,無論你需要的會話你可以這樣寫:「我不能在函數間傳遞的價值,因爲他們被覆蓋」

def session = SessionUtil.getSession() 
+0

只要我使用這段代碼,我的履帶停止工作。 :( –

+0

什麼錯誤,你得到什麼?任何異常?堆棧跟蹤? – grantmcconnaughey

+0

沒有什麼。它只是阻止我的履帶式機器運作。每當我嘗試在我的src/groovyBasicCrawler類中使用會話,我的履帶不起作用。但是你的方法很好,謝謝 –

1

這很難理解你在這裏試圖實現什麼。在HTTP請求期間,會話只對連接的用戶有意義。如果您使用的是例如src/groovy類一個控制器,您可以將該會話作爲該方法的參數傳遞給您的方法。否則,你會如何使用它?

4

你引用的鏈接是要走的路 - 靜態方法RequestContextHolder.getRequestAttributes()會給你屬於當前執行的請求GrailsWebRequest實例,或者null如果你調用它未運行的線程控制器行動。一旦你有GrailsWebRequest你可以從那裏訪問會話,請求,響應,參數和閃光燈(通過getFlashScope())。

+0

謝謝。你可以分享一些例子嗎? –

+3

@ayushi有沒有什麼可說的更多 - 'def session = RequestContextHolder.requestAttributes?.session' –