我目前正在试图找出,如何修改我正在使用的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替换空格。带有空字符的方括号? 这几乎就是我通过文档无法得到的。
提前感谢您的帮助!
答案 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;
}