2013-06-24 34 views
6

問題:控制器的操作具有渲染標記而不傳入模型。存在以「get」開頭的動作。在'Grails'控制器的操作中使用'get'會導致即使未調用操作也會執行操作

的grails-app /視圖/站點/ home.gsp:

homepage 

SiteController.groovy:

class SiteController { 

    def index() { 
     render (view: "home") 
    } 

    def getTest() { 
     render "getTest" 
    } 

} 

該網站是在本地主機訪問:8080 /站點執行的索引作用SiteController。

預期輸出:主頁 實際輸出:getTest主頁

如果索引的呈現動作被改變爲這樣的:

render(view: "home", model: [:]) 

預期的輸出被產生。

如果輸入的字符單詞前加上獲得的動作名稱,預期的輸出效果。

有趣的是,getTest()是顏色編碼爲紫色IDEA。還應該注意的是,如果你在開始時有多個get單詞的方法,它們都會被執行。

這在Grails 1.3.6中沒有發生。這可以在全新的Grails 2.2.2項目中重現,並且對我來說似乎是一個錯誤。這是爲什麼發生?

回答

8

GRAILS-9310表明這是一個已知的限制,不會被更改,解決方法不是爲您的操作命名爲get*。根本原因是

如果沒有返回明確的模式控制器的屬性將被用作模型(Grails docs

當你定義一個getTest()方法,這意味着該控制器具有test性質,並且當您在沒有顯式模型的情況下渲染「home」視圖時,控制器屬性將被枚舉以形成模型映射。 getTest()方法將作爲此枚舉過程的一部分被調用。

如果您確實需要getTest出現在URL中,那麼您必須將實際操作命名爲其他名稱,然後定義自定義URL映射以將/controller/getTest URI指向重命名的操作。

相關問題