2016-07-19 25 views
1

我目前正试图弄清楚,如何修改要集成到我正在使用的URL映射中的参数。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" 
    } 

参数$标题是相当多的数据集,它是从数据库中抽取,并且将在下面的格式需要发送[这是一个标题。所以在字符串的前面和后面都有方括号,单词通过空格分开。

如果我现在用嵌套的参数创建一个g:link链接,它会在从数据库中拉出时放入url中。我正在尝试的是创建SEO-URL,它将显示某个出版物的特定标题,而不是由网址编码的“%20”分隔。

到现在为止,我能够生成动态的URL看起来像这样:

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

而且我已经实现了它通过JQuery的,但它应该是静态的,用户应该能够复制链接打开页面本身 - 在加载页面时更改url客户端时不可能。

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

非常感谢您的帮助!

回答

0

我设法解决我的问题,创建一个包含正则表达式的函数的服务,并执行该函数到我的g:链接中的参数标题,我首先将其转换为一个字符串,该字符串传递给该函数。

<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; 
}