我已经发布了这个问题,但我意识到aswer不是我想要的。想象一下这个控制器:
class exampleController{
def action1 = {
...
[lala: lala, lele: lele]}
...
}
def action15 = {
...
[lala: lala, lele: lele]
}
我希望能够在此控制器的所有动作中返回相同的参数。想象一下:
def book = Book.findAllByIsbn(Isbn.get(1))
[book: book]
除了在所有动作上编写所有相同的代码之外,还有什么方法可以做到这一点吗?我尝试过这种方法,它不起作用:
def action5 = {getModel()}
private getModel() {
def book = Book.findAllByIsbn(Isbn.get(1))
[book: book]
}
}
它不起作用,因为我的想法是,他确实接受了多个[return1:aaa,return2:bbb]。有什么建议吗?我也尝试过像这样的过滤器:Grails controllers repeated code for all actions 但我无法使其成功。如果可能的话,我会对任何解决方案进行详细解释:p先谢谢, VA
答案 0 :(得分:0)
如果您想从所有操作中返回相同的模型,则此方法应该有效:
class ExampleController {
def action5 = {getModel()}
def action1 = {getModel()}
//etc.
private getModel() {
def book = Book.findAllByIsbn(Isbn.get(1))
[book: book]
}
}
如果您想要返回相同的模型和从所有操作中呈现相同的视图,您可以从每个操作返回相同的ModelAndView
,但之后我会问您为什么如果他们都做了完全相同的事情,需要单独的行动吗?
我真的不明白你的假设
这是行不通的,因为我觉得,他确实接受了多个
[return1: aaa, return2: bbb]
如果您建议getModel()
只能返回带有单个条目的模型,我发现很难相信。你能详细说明一下吗,或者发布一些更多的信息(例如堆栈跟踪,单元测试)来说明它是如何/为什么不起作用的?
在阅读下面的评论之后,我想我终于明白了你想要实现的目标,即将getModel()
(上面)返回的模型附加到各种其他操作返回的模型中。这有用吗:
class ExampleController {
def action5 = {
def action5Model = [foo: 'bar']
return addBookModel(action5Model)
}
def action1 = {
def action1Model = [foo2: 'bar2']
return addBookModel(action1Model)
}
//etc.
private Map addBookModel(Map model) {
def book = Book.findAllByIsbn(Isbn.get(1))
model.book = book
return model
}
}
此方法仅在您想要在单个控制器中添加书籍模型时才有效。如果要在多个控制器中添加书籍模型,可以通过以下方式执行此操作:
addBookModel
放入控制器扩展的抽象类addBookModel
放入与控制器混合的类中(使用@Mixin
)addBookModel
放入控制器操作后执行的过滤器答案 1 :(得分:0)
所以它不是同一个模型,而是一个重复部分的模型。
您应该知道返回值是普通的Map
。
因此,返回值可以像return getCommonModel() + [book: currentBook]
那样构建,其中getCommonModel()
返回另一个地图。
答案 2 :(得分:-1)
如果您在多个页面中使用完全相同的模型。我建议你使用taglib。