2016-07-19 7 views
1

В настоящее время я пытаюсь выяснить, как изменить параметр, который интегрируется в сопоставление URL, которое я использую.URL Mapping - Замена символов в параметре, извлеченном из базы данных

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: ссылку теперь с вложенными параметрами, она попадает в URL-адрес, поскольку он извлекается из базы данных. Я пытаюсь создать SEO-URL-адреса, которые будут представлять определенный заголовок публикации, дешифрованной дефисами, вместо URL-адреса «% 20».

До сих пор я был в состоянии генерировать динамические URL, выглядящие так:

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

Кроме того, я уже реализовал ее через JQuery, хотя он должен быть статическим и пользователи должны иметь возможность скопировать ссылку, чтобы открыть сама страница - это было бы невозможно при изменении клиентской стороны URL-адреса при загрузке страницы.

Есть ли способ определить функцию с чем-то вроде replaceAll. ('', '-'), который может быть вызван в параметр в сопоставлении для замены пробелов с дефисами и f.e. квадратные скобки с пустым символом? Это в значительной степени то, что я не смог найти в документации.

Заранее благодарю вас за помощь!

ответ

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