1

我目前正在尝试弄清楚如何修改集成到我正在使用的 URL 映射中的参数。

static mappings = 
{

"/$controller/$action?/$id?/(.$format)?"
{
        constraints {
            // apply constraints here
        }

}


name test1: "/.../$title/..."{
        controller = "study"
        action = "st_show"
    }

name test2: "/.../$title/..."{
        controller = "search"
        action = "se_show"
    }

参数 $title 几乎是一个数据集,它是从数据库中提取的,并将以下列格式传输[这是一个标题]。所以字符串前后都有方括号,单词之间用空格隔开。

如果我现在通过 g:link 创建一个链接,其中嵌套了参数,它会在从数据库中提取时被放入 url。我正在尝试创建 SEO-URL,它将显示由连字符分隔的出版物的某个标题,而不是 url 编码的“%20”。

到目前为止,我能够生成如下所示的动态 url:

http://localhost:8080/projectname/show/%5BAllgemeine%20Bevölkerungs[...]/782/...PARAMS...

此外,我已经通过 JQuery 实现了它,尽管它应该是静态的,并且用户应该能够复制链接以自己打开页面 - 在加载页面时更改 url 客户端时这是不可能的。

有没有办法用 replaceAll.(' ', '-') 之类的函数定义函数,可以在映射中的参数上调用该函数以用连字符替换空格,用空字符替换 fe 方括号?这几乎是我无法通过文档获得的。

预先感谢您的帮助!

4

1 回答 1

0

我设法通过使用包含正则表达式的函数创建服务并将此函数执行到我的 g:link 中的参数标题上来解决我的问题,我首先将其转换为字符串,然后将其传递给函数。

<g:link controller="study" action="st_show" params="[data: data, ... title: ConversionService.convert(fieldValue(bean: path).toString(), ... data: data)]"></g:link>

以及 ConversionService 中的函数

public static String convert(String title){
        title = title.replaceAll("\\s", "-").replaceAll("[^0-9a-zA-Z\\-]", "");
        return title;
}
于 2016-07-20T09:08:12.360 回答