grails索引页面的最佳实践

时间:2008-10-13 20:34:12

标签: grails indexing model

在grails应用中为索引页填充模型的正确方法是什么?默认情况下没有IndexController,是否有其他机制可以将此列表及其中的列表添加到模型中?

4 个答案:

答案 0 :(得分: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 ]
    }
}

答案 1 :(得分: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文件变得不必要,因此我删除了它。

答案 2 :(得分:4)

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

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

答案 3 :(得分: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:"/")
    }
}