27

在 grails 应用程序中为索引页面填充模型的正确方法是什么?默认情况下没有 IndexController,是否有一些其他机制可以将这个和那个列表放入模型中?

4

4 回答 4

36

我不会声称这是正确的方式,但它是开始的一种方式。将控制器作为默认设置并不需要太多。向 UrlMappings.groovy 添加映射:

class UrlMappings {
    static mappings = {
      "/$controller/$action?/$id?"{
            constraints {
                // apply constraints here
            }
        }
      "500"(view:'/error')
     "/"
        {
            controller = "quote"
        }
    }
}

然后将索引操作添加到现在的默认控制器:

class QuoteController {

    def index = {
        ...
    }
}

如果您要加载的内容已经是另一个操作的一部分,只需重定向:

def index = {
    redirect(action: random)
}

或者要真正实现一些重用,请将逻辑放入服务中:

class QuoteController {

    def quoteService

    def index = {
        redirect(action: random)
    }

    def random = {
        def randomQuote = quoteService.getRandomQuote()
        [ quote : randomQuote ]
    }
}
于 2008-10-15T12:34:44.323 回答
21

我无法让上面的 Ed T 的例子起作用。也许从那时起 Grails 发生了变化?

经过一些实验和一些在网上翻找后,我最终得到了这个UrlMappings.groovy

    "/"(controller: 'home', action: 'index')

我的 HomeController 看起来像这样:

class HomeController {

  def index = {
    def quotes = = latest(Quote.list(), 5)
    ["quotes": quotes, "totalQuotes": Quote.count()]
  }

}

在 中views/home,我有一个index.gsp文件。这使得index.gsp视图中的文件变得不必要,所以我删除了它。

于 2009-07-05T23:00:54.940 回答
4

好的答案:如果您需要为索引页面填充模型,是时候从使用直接 index.gsp 更改为索引控制器了。

邪恶的答案:如果您创建一个控制器为“*”的过滤器,即使对于静态页面,它也会被执行。

于 2008-10-13T20:39:41.960 回答
0

在 grails 1.3.6 中仅添加

"/index.gsp"(uri:"/")

到 UrlMappings.groovy 对我来说效果很好。它与添加新控制器和之前描述的映射具有相同的效果。

下面是我完整的 UrlMappings.groovy:

class UrlMappings {

    static mappings = {
        "/$controller/$action?/$id?"{
            constraints {
                // apply constraints here
            }
        }

        "/"(view:"/index")
        "500"(view:'/error')

        "/index.gsp"(uri:"/")
    }
}
于 2011-02-03T09:44:14.000 回答