2011-05-26 114 views
4

我的控制器是如下因素:Grails的控制器傳遞參數

def participated = { 
    def temp = ConferenceUser.get(params.temp) 

    def prizes = Prizes.findAllByConferenceUser(temp) // find all rooms where current computer is 
    def subms = Submissions.findAllByConferenceUser(temp) // find all rooms where current computer is 

    [temp: temp, priz: prizes, subm: subms] 
} 

但不知何故,當我成功地更新會議的價值,我想回到初始頁面(參加),但我不知道該怎麼傳回params.temp。 (如果我做一個簡單的重定向,作爲控制器期待params.temp,它會給我一個錯誤,因爲我不能用null對象作爲參數搜索獎品所以,想象我的更新控制器如下:

def update = { 
    def saveParamshere = params.temp 
    ... 
    ... 
    (code here) 
    ... 
    ... 

    redirect(action: "participated", params: [temp: saveParamshere]) 
} 

如何成功返回到我的主頁並通過params.temp

回答

6

我想問題可能是,你是通過提交表單(我想)調用update行動。也許你沒有通過該表格的temp值?您可以通過將temp作爲隱藏輸入字段嵌入到表單中,或將其應用於表單標記上的param屬性。

使用隱藏域,可能是這樣的(在你的視圖文件):

<g:form controller="somecontroller" action="update"> 
    (...) 
    <g:hiddenField name="temp" value="${temp}" /> 
    (...) 
</g:form> 

使用params屬性:

<g:form controller="somecontroller" action="update" params="[temp : temp]"> 
    (...) 
</g:form> 

我沒有測試任何這些產品可能存在一些問題,尤其是第二種方法。

2

您可以將參數放在閃存範圍內,該範圍適用於兩個請求,或者將它們放入會話中並檢索他們這樣。

這裏是一個鏈接到使用閃光範圍的grails文檔:

Grails - Controllers - Controller Scopes

+0

好吧,我是gona嘗試這種方式。請舉個小例子? – VictorArgentin 2011-05-26 21:25:49

+0

兩個請求的閃光範圍?從來沒有聽說過...... – jjczopek 2011-05-26 21:28:20

+1

是的,閃存範圍爲當前請求和下一個請求生存(即保留重定向)。因此,在更新操作中執行flash.temp = params.temp意味着您可以在重定向的操作中訪問flash.temp。 – Chris 2011-05-27 09:36:51

相關問題