【问题标题】:Best practices for grails index pagegrails 索引页面的最佳实践
【发布时间】:2010-09-16 23:16:21
【问题描述】:

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

【问题讨论】:

    标签: grails indexing model


    【解决方案1】:

    我不会说这是正确的方式,但它是开始的一种方式。将控制器作为默认设置并不需要太多。向 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 ]
        }
    }
    

    【讨论】:

    • 我认为 UrlMappings 可能应该读过"/" {controller: "quote"}。在我将“=”更改为“:”之前,它对我不起作用。
    • static defaultAction = "random" - 您可以将 defaultAction 静态字段添加到控制器,并将所需的操作名称作为值,而不是从索引操作重定向。
    【解决方案2】:

    我无法让上面 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 文件变得不必要,因此我将其删除。

    【讨论】:

    • 对我来说重要的一点是(重新)移动 /views/index.gsp。在此之前,它一直适用于例如localhost:8080/ 但不是简单的 localhost:8080
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      在 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:"/")
          }
      }
      

      【讨论】:

      • 在 UrlMappings 中使用 uri 进行重定向是否有效?我试过了(对于一个稍微不同的用例),但它没有。收到控制器为空的错误。我不得不求助于从控制器重定向。
      猜你喜欢
      • 2023-04-08
      • 2022-01-22
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 2013-07-31
      相关资源
      最近更新 更多