2011-06-14 69 views
1

我對grails有一個簡單的問題。我有一個查看頁面迭代一個對象數組來顯示它們。 HTML/Grails標籤代碼如下所示:從查看Grails調用控制器方法

<g:each in="${ICFList}" status="i" var="icf"> 
<tr> 
    <td>${icf.printName?.encodeAsHTML()}</td> 
    <td>${icf.activeNote?.encodeAsHTML()}</td> 
</tr> 
</g:each> 

此代碼工作並顯示我需要的內容。但是,我不想在我的icf對象中存儲printName變量。該對象還包含一個字符代碼來標識它,並且我有一個方法根據代碼查找printName值。基本上,我的問題是這樣的:

有沒有辦法做這樣的事情

<td>${icf.getNameFromCode(${icf.code})}</td> 

而不必存儲名稱的任何地方? getNameFromCode方法在控制器對象中爲此特定視圖定義,但我無法弄清楚如何從gsp訪問它。任何幫助是極大的讚賞。

回答

4

我不認爲你可以從視圖中調用控制器方法。

我建議要麼將getNameFromCode移動到域類中,要麼在taglib中實現邏輯並使用自定義標籤來顯示數據。選擇哪個選項取決於該方法是指某個模型內在的東西,還是與視圖相關的東西。

最新的Getting started with Grails screencast解釋瞭如何創建和使用自定義標籤。

+0

感謝Gustavo我給了tagLibs一個鏡頭,它的工作很完美 – 2011-06-14 19:39:56

+0

這些字段名稱更像模型的字段,我建議您製作域/任何類字段並使用Model。 – 2011-06-15 07:27:34

1

它也可以通過對此控制器進行AJAX調用來實現,但我認爲Gustavo的答案就是您要找的。

6

正式回答這個問題,你可以使用g:include

<g:include controller="book" action="list" /> 

雖然單個實體的領域感受到這麼多像模特