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

时间:2016-07-19 10:50:35

标签: grails grails-3.0.9 urlmappings.groovy

我目前正在试图找出,如何修改我正在使用的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:链接嵌入的params创建一个链接,它会从数据库中拉出来放入url。我正在尝试创建SEO-URL,它将呈现由连字符而不是url编码的“%20”分隔的出版物的特定标题。

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

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

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

有没有办法用replaceAll。('',' - ')来定义一个函数,可以在映射中的参数上调用它来用连字符和f.e替换空格。带有空字符的方括号? 这几乎就是我通过文档无法得到的。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

转换服务中的函数

public static String convert(String title){
        title = title.replaceAll("\\s", "-").replaceAll("[^0-9a-zA-Z\\-]", "");
        return title;
}