2011-04-08 61 views
7

我對grails很陌生。我只注意到控制器中的變量在視圖中不可見。當我將它分配給作用域時,我只能獲取變量值。這是標準的Grails方式還是我做錯了。另外,參數範圍是否正確使用或者我應該使用session,servletContext?Grails控制器變量在視圖中不可見

在控制器

String uploadLocation = grailsApplication.config.uploads.location.toString() 
params.put "upLoc", uploadLocation 

在查看

<td> <input type="text" value="${params.get('uploc')}/${fileResourceInstance.decodeURL()}"></input></td> 

我很熟悉Ruby on Rails的,這是RoR中處理的非常不同。謝謝。

回答

11

你可以像Maricel說的那樣做,但還有另一種方式(我認爲這是一種默認的方式):返回你想傳遞給視圖的值。例如

def test = "abc" 
def num = 3 

return [testInView: test, numInView: num] 

然後在視圖中,您可以訪問$ {testInView} $ {numInView}

另一種略有不同的方式:你可以忽略了「迴歸」的關鍵字,這是「常規的方式」返還函數的最後一個值。

6

您需要通過渲染方法,以您的變量傳遞作爲模型的一部分,在你的控制器動作,這樣的:

String uploadLocation = grailsApplication.config.uploads.location  
render(model: [uploadLocation: uploadLocation]) 

然後在視圖中,你可以這樣做:

<td> 
    <input type="text" value="${uploadLocation}/${fileResourceInstance.decodeURL()}"/> 
</td> 

另一方面,如果這是在Config.groovy中定義的值,那麼您可以在gsp中執行此操作:

<%@ page import="org.codehaus.groovy.grails.commons.ConfigurationHolder as CH" %> 

<td> 
    <input type="text" value="${CH.config.uploads.location}/${fileResourceInstance.decodeURL()}"/> 
</td> 

欲瞭解更多信息,請查閱Grails docs

1

一個有趣的側面說明。如果你沒有從你的動作中返回任何東西,那麼動作範圍內的所有變量都可以在你的視圖中看到,如下所示:http://www.grails.org/Controllers+-+Models+and+Views

+0

我沒有看到這個記錄在你鏈接的頁面上,也只是它的行動範圍變量或類寬? – EdgeCaseBerg 2014-03-12 18:14:50

相關問題