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;
}
Другие вопросы по тегам