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



根据Grails文档,默认的URL映射(控制器操作和URL之间)使用camel大小写。您可以很容易地更改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>

将始终生成指向以下位置的URL:

/hello/index

而不是:

/hello

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

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

URL是用户体验的一部分,应该是干净的,所以index问题真的很烦人。

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

grails app/config/UrlMappings.groovy

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

最新更新