0

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

我想这样做:

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

而不是这个:

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

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

我假设 grails 可以将映射或 bean 作为模型处理,但很快意识到将 bean 传递给 gsp 会导致 NullPointerExceptions,因为找不到属性。

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

[model: myBean]

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

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

4

2 回答 2

2

请参阅渲染文档参考。您可以在示例中找到

// 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)
于 2013-05-31T09:22:11.943 回答
1

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

New Person().properties
于 2013-05-31T12:38:38.810 回答