Сопоставление 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"
    }

Параметр $title в значительной степени представляет собой набор данных, который извлекается из базы данных и передается в следующем формате [это название]. Таким образом, перед строкой и за ней стоят квадратные скобки, а слова разделяются пробелами.

Если я сейчас создаю ссылку через g:link с вложенными параметрами, она помещается в URL-адрес по мере того, как она извлекается из базы данных. Я пытаюсь создать SEO-URL-адреса, которые будут представлять определенный заголовок публикации, разделенный дефисами, вместо закодированного в URL-адреса «% 20».

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

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

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

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

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


person Nimmi    schedule 19.07.2016    source источник


Ответы (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;
}
person Nimmi    schedule 20.07.2016