【问题标题】:Grails URL mappingsGrails URL 映射
【发布时间】:2012-02-02 22:09:45
【问题描述】:

在我的 Grails 应用程序中,我有几个域类,例如 Author 和 Book。我正在使用默认的 URL 映射:

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

所以显示 id 为 2 的书的相对 URL 是 /book/show/2 或对于 id 为 5 的作者来说是 /author/show/5。 Author 和 Book 类都有一个唯一的 name 属性。

我希望显示作者或书籍的 URL 使用名称而不是数据库 ID 来识别书籍/作者,例如/author/show/shakespeare 和 /book/show/ulysses。这是否可以在不更改域类(例如名称字段为 id(主键))的情况下实现?

【问题讨论】:

    标签: grails url-rewriting seo


    【解决方案1】:

    您可以将字符串(例如“shakespeare”)作为params.id 传递,然后代替:

    Author.get(params.id)
    

    在你的控制器方法中,做:

    Author.findByName(params.id)
    

    据我所知,id 参数(与 URL 一起使用时)必须是 long。

    【讨论】:

    • 刚刚对此进行了快速测试,它似乎有效。去了http://example.com:8080/myapp/books/show/Book1,看到它渲染出我的名为“Book1”的自举书。诚然,这涉及到控制器中的大量工作以随处更改。
    • 更改控制器是很容易的部分——我可能只需要为每个域类修改(一行)一个操作。更困难的部分是跟踪调用该操作的所有位置并将其更改为发送名称而不是 ID。无论如何,似乎没有其他选择,所以你赢得了梦寐以求的复选标记。衷心的祝贺,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多