我爲我的域類創建了一個靜態腳手架,併爲該域類獲得了一個控制器。控制器的create
動作看起來像:爲什麼Grails的腳手架創建動作使用params?
def create() {
[userInstance: new User(params)]
}
我不知道爲什麼行:
[userInstance: new User(params)]
已添加。很明顯,當create
動作被調用時,不會有任何params
- 那麼爲什麼會添加此行?
我爲我的域類創建了一個靜態腳手架,併爲該域類獲得了一個控制器。控制器的create
動作看起來像:爲什麼Grails的腳手架創建動作使用params?
def create() {
[userInstance: new User(params)]
}
我不知道爲什麼行:
[userInstance: new User(params)]
已添加。很明顯,當create
動作被調用時,不會有任何params
- 那麼爲什麼會添加此行?
顯然被調用
create
操作時,並且不會有任何params
不一定 - 試想一個情況下,你要在創建視圖的形式預先填充幾個字段。你可以使用:
/app/user/create?username=myusername
會導致其中在視圖的userInstance
具有形式顯示填充的用戶名字段。
還有可能是params,雖然一般不會有。
它允許預加載值,有時可能會有幫助,包括重新顯示創建表單。
這從根本上來說是由Spring引發的,這個動作叫做'綁定',它是從一個jsp(本例中爲gsp)到一個對象的屬性並反之亦然的綁定表單元素的動作。
要將對象綁定到表單,那麼您應該先創建它,ypu如何綁定空對象?這是不可能的,這就是爲什麼新的ClassObject(...)
後,在Groovy中,我們有POGO的,和POGO的一個特點是與地圖初始化它們的能力,例如:
new User(name:'John',lastname:'Zuñiga')
但是在這種情況下,這個'params'對象有一個小巧的魔法。這來自Groovy Servlets或Groovlets。你如何獲得一個從表單傳入的Java參數?那麼,與request.getParam("param_name")
,但在這種情況下與Groovy你收到一個params對象,這個params對象是一張地圖,一個groovy地圖...嗯,一秒鐘...
如果Groovy中的POGO能夠接收Map作爲構造函數,而params對象是一個Map ...也許......哦,我可以把該地圖放在我的對象的構造函數中,並且在Spring之後用這個新對象綁定到窗體上,所以這個對象是在這個控制器的行動中旅行,所以它帶有填充的屬性。
我希望這個解釋很清楚,如果你有任何問題,我在這裏...... 問候
+1好的解釋謝謝回答....;) – 2011-12-28 06:05:22
重新顯示創建表單的(例如,當出現驗證錯誤),通常是通過不同的動作(即'保存')在Grails中。但是,依賴於某人想要如何使用這些操作,仍然是一個有效的情況。 – 2011-12-27 16:09:46
@RobHruska同意,我認爲預加載方案更可能。 – 2011-12-27 23:16:35