URL 映射 - 替换从数据库中提取的参数中的字符

URL Mapping - Replacing characters in a parameter pulled from a database

我目前正在尝试弄清楚如何修改集成到我正在使用的 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 创建一个 link 并且嵌套了参数,它会在从数据库中提取时被放入 url 中。我正在尝试创建 SEO-URLs,它将显示由连字符而不是 url-encoded“%20”分隔的出版物的特定标题。

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

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

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

有没有一种方法可以使用类似 replaceAll.(' ', '-') 的函数来定义函数,它可以在映射中的参数上调用以用连字符和 f.e 替换空格。带空字符的方括号? 差不多了,我无法通过文档获得的内容。

提前感谢您的帮助!

我设法解决了我的问题,方法是创建一个包含正则表达式的函数的服务,并在我的 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;
}