2012-02-02 167 views
1

在我的Grails應用程序中,我有幾個域類,如AuthorBook。我使用的是默認的URL映射:Grails URL映射

static mappings = { 
    "/$controller/$action?/$id?"{ 
    constraints { 
     // apply constraints here 
    } 
    } 
} 

所以相對URL以顯示書的ID 2是/book/show/2或作者ID爲5它的/author/show/5AuthorBook類都具有唯一的name屬性。

我傾向於使用URL來顯示作者或書籍使用名稱而不是數據庫ID來標識書籍/作者,例如, /author/show/shakespeare/book/show/ulysses。這可以在不更改域名的情況下實現,例如name字段是id(主鍵)?

回答

2

你可以只通過字符串(如「莎士比亞」)作爲params.id然後,而不是做一個:

Author.get(params.id) 
在你的控制器方法

,做到:

Author.findByName(params.id) 

據我所知,id參數(當與URL一起使用時)不具有具有long

+0

剛做了一個快速測試,它似乎工作。去了'http://example.com:8080/myapp/books/show/Book1',看到它渲染出我名爲「Book1」的引導書。無可否認,這涉及到控制器在各處進行相當數量的工作。 – 2012-02-02 14:41:19

+0

更改控制器是很容易的部分 - 我可能只需要爲每個域類修改(一行)單個操作。更難的部分是追蹤所有調用該動作的地方,並將其更改爲發送名稱而不是ID。無論如何,似乎沒有其他選擇,所以你贏得了夢寐以求的選中標記。衷心祝賀,謝謝。 – 2012-02-03 11:32:57