2011-12-30 54 views
0

我在用簡單的映射Grails的我的應用程序有一個簡單的控制器......Grails的使用不一致的重定向URI時爲同一控制器

TCacheController { 
    def index ={} 
    def list= {} 

}

"/tcache/" (controller: "TCache"){ 
    action = [GET: "index"] 
} 

"/tcache/items" (controller: "TCache"){ 
    action = [GET: "list"] 
} 

我所有的網址是的形式http://.../tcache/ *,並且一切正常。問題出現時,我在這樣的視圖中使用<g:actionSubmit> ......

<g:form controller="TCache"> 

    <g:actionSubmit class="delete" action="list" value="List Items"> 

的提交作品,但在我的名單行動我有一個重定向萬一出了差錯,和redirect已造成404因爲Grails的發送到/TCache/..而不是/tcache/...

在什麼情況下Grails會更改URI的大小寫,並且有沒有辦法強制它始終使用/tcache?我嘗試在表單中使用controller =「tcache」,但隨後該操作停止工作,可能是因爲Grails無法找到控制器。

+0

列表動作中的重定向代碼是什麼樣的? – david 2012-01-02 17:01:34

+0

'list'行爲的代碼基本上是獲取一些數據,然後執行'render [view:'list']'到'list.gsp'。如果在動作中發生任何異常,我就會捕獲它並做一個'redirect(action:'index')',那就是當我得到404時,因爲它應該嘗試重定向到'/ TCache/...'重定向到'/'tcache/...',我試圖找出它爲什麼使用大寫字母。 – raffian 2012-01-03 18:13:52

回答

1

我設法弄清楚了我自己。 Grails在配置上的約定很好,但有時Grails並不總是正確猜測。

在控制器中,渲染視圖時,使用文字路徑,確保Grails將不必猜測什麼...

TCacheController { 
    def index ={} 
    def list= { 
    render(view: "/tcache/listitems", model:[]) 
} 

的,而不是...

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

在我的案例,有多個控制器,看起來Grails有點困惑,並且試圖在它應該使用/tcache/listitems時爲前綴/TCache/..作爲完整渲染視圖路徑的前綴。

相關問題