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"
}
Параметр $ title в значительной степени является набором данных, который извлекается из базы данных и который будет передаваться в следующем формате [это заголовок]. Таким образом, есть квадратные скобки спереди и сзади строки, а слова разделяются пробелами.
Если я сейчас создаю ссылку через g: link с вложенными в нее параметрами, она помещается в URL-адрес при извлечении из базы данных. Я пытаюсь создать SEO-URL, которые будут представлять определенный заголовок публикации, разделенный дефисами вместо URL-адреса "%20".
До сих пор мне удавалось генерировать динамические URL, выглядящие так:
http://localhost:8080/projectname/show/%5BAllgemeine%20Bevölkerungs[...]/782/...PARAMS...
Более того, я уже реализовал это через JQuery, хотя он должен быть статичным, и пользователи должны иметь возможность скопировать ссылку, чтобы открыть страницу самостоятельно - это было бы невозможно при изменении URL-адреса на стороне клиента при загрузке страницы.
Есть ли способ определить функцию с чем-то вроде replaceAll.(' ', '-'), который может быть вызван на параметр в отображении, чтобы заменить пробелы дефисами, а квадратные скобки - пустым символом? Это почти то, что я не смог найти в документации.
Спасибо заранее за вашу помощь!
1 ответ
Мне удалось решить мою проблему, создав службу с функцией, содержащей регулярное выражение, и выполнив эту функцию для заголовка параметра в моей ссылке 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;
}