使用默认索引方法的Grails连字符URL转换器问题

时间:2014-01-09 06:30:52

标签: grails

根据Grails documentation,默认的URL映射(在控制器操作和URL之间)使用驼峰大小写。您可以轻松更改URL映射以使用带连字符的URL:

grails.web.url.converter = 'hyphenated'

例如,HelloWorldController.showUsers将映射到:

/hello-world/show-users

在Grails中,您可以使用默认的控制器操作,按照惯例,它是“索引”。因此,例如,如果您有一个名为index()的方法,则以下URL将触及该方法:

/hello-world

您可以创建一个链接到该URL的锚标记,如下所示:

<g:link controller="HelloWorld">Go!</g:link>

我注意到一个奇怪的错误,如果我的控制器名称前缀只有一个“单词”,如HelloController,那么:

<g:link controller="Hello">Go!</g:link>

...将始终生成指向以下内容的网址:

/hello/index

...而不是:

/hello

我重构并将其重命名为其他单字控制器并且问题仍然存在。我使用的是Grails 2.2.2,所以我升级到Grails 2.3.4并且很惊讶这个bug仍然存在。将控制器重命名为任何两个单词前缀,如HomePageController,HelloWorldController,OneTwoController等,现在是一种解决方法。

这是我第一次真正使用GSP。我做错了吗?

1 个答案:

答案 0 :(得分:0)

网址是用户体验的一部分,应该是干净的,因此index问题真的很烦人。

这很不方便,但您可以通过映射每个页面并省略操作来消除单个字控制器的URL的index部分。

<强>的grails-app /配置/ UrlMappings.groovy

class UrlMappings {

   static mappings = {
      "/hello"     (controller: "hello")
      "/settings"  (controller: "settings")
      "/dashboard" (controller: "dashboard")
      ...