【发布时间】:2010-09-16 23:16:21
【问题描述】:
在 grails 应用程序中为索引页面填充模型的正确方法是什么?默认情况下没有 IndexController,是否有其他机制可以将这个和那个列表放入模型中?
【问题讨论】:
在 grails 应用程序中为索引页面填充模型的正确方法是什么?默认情况下没有 IndexController,是否有其他机制可以将这个和那个列表放入模型中?
【问题讨论】:
我不会说这是正确的方式,但它是开始的一种方式。将控制器作为默认设置并不需要太多。向 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 ]
}
}
【讨论】:
"/" {controller: "quote"}。在我将“=”更改为“:”之前,它对我不起作用。
static defaultAction = "random" - 您可以将 defaultAction 静态字段添加到控制器,并将所需的操作名称作为值,而不是从索引操作重定向。
我无法让上面 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 文件变得不必要,因此我将其删除。
【讨论】:
好答案:如果您需要为索引页面填充模型,是时候从使用直接 index.gsp 更改为索引控制器了。
邪恶的答案:如果您创建一个控制器为“*”的过滤器,即使对于静态页面也会执行。
【讨论】:
在 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:"/")
}
}
【讨论】: