2013-05-31 19 views
0

簡短的問題:我想用一個類型的bean作爲Grails中,而不是地圖的模型。這可能嗎?我可以在Grails中使用Bean作爲模型而不是Map嗎?

我想做到這一點:

def index = { 
    new Person(firstName:"foo", lastName:"bar", age:30) 
} 

取而代之的是:

def index = { 
    [firstName:"foo", lastName:"bar", age:30] 
} 

長的問題:我maintinaing其他開發人員編寫的控制器,這真的很難了解模型中的所有可能條目。該模型通過多種方法進行填充。我想重構控制器來返回一個自定義bean作爲模型,但我希望gsp不需要改變。

我認爲Grails的可以辦理某一地圖或bean作爲一個模式,但很快就意識到,通過一個bean普惠制導致NullPointerException異常作爲屬性找不到。

我意識到,我的控制器可以返回一個地圖,如:

[model: myBean] 

但後來我就需要去通過GSP和$ {} someProp更改爲$ {} model.someProp所有引用。

我也知道,我可以使用反射到我的豆轉換成地圖,但我不希望做這一點。

+0

爲什麼不能在地圖是'[someProp:新的Person()]'? ? –

+0

我希望只是改變控制器的代碼,並保持原樣。這需要我通過GSP,用$ {someProp.firstName}替換所有$ {firstName}。這不是一個簡單的查找和替換,因爲GSP中的一些局部變量不需要加前綴。 –

+0

好吧,我明白 - 看到我的回答 –

回答

2

render文檔的參考。您可以在實例

// render a template to the response for the specified bean 
def theShining = new Book(title: 'The Shining', author: 'Stephen King') 
render(template: "book", bean: theShining) 
+0

謝謝!這是一個可行的解決方案,但需要我明確說明模板。有什麼辦法可以保持模板從方法名稱派生出來的功能嗎? –

+0

我想如果你返回[bean:myBean],它會起作用。 –

+0

那麼'bean'是地圖中的保留屬性名稱嗎?或者我需要在我的GSP中使用$ {bean.firstName}嗎? –

1

在控制器年底發現:(注意:這將返回所有屬性)

New Person().properties 
相關問題