我可以使用Bean作为grails中的模型而不是Map吗?

时间:2013-05-31 09:18:14

标签: grails groovy controller

简短问题:我想使用类型化的bean作为grails中的模型而不是Map。这可能吗?

我想这样做:

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

而不是:

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

长问题:我正在管理其他开发人员编写的控制器,而且很难理解模型中的所有可能条目。该模型填充了许多方法。我想重构控制器以返回一个自定义bean作为模型,但我希望gsp不需要更改。

我认为grails可以处理map或bean作为模型,但很快就意识到将bean传递给gsp会导致NullPointerExceptions无法找到属性。

我意识到我的控制器可以返回如下地图:

[model: myBean]

然后我需要通过gsp并将所有引用从$ {someProp}更改为$ {model.someProp}。

我也知道我可以使用反射将我的bean转换为Map,但我也不想这样做。

2 个答案:

答案 0 :(得分:2)

请参阅render doc参考。您可以在示例中找到

// 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)

答案 1 :(得分:1)

在你的控制器的末尾:(注意这将返回所有属性)

New Person().properties