Вероятно, вы можете справиться с этим, используя вариант Post / Redirect / Get:
http://en.wikipedia.org/wiki/Post/Redirect/Get
На нашем сайте Grails у нас много полей поиска.Когда пользователь щелкает по ссылке на страницы, все эти поля поиска оказываются в URL, который создает уродливые URL: с более высоким риском того, что пользователи добавят в закладки эти адреса, что может означать будущие проблемы.
Мы решили это, сохранив не тольковсе POST, но также и GET с параметрами в сеансе, перенаправьте на GET без параметров и добавьте их снова в контроллер.Это не только создает красивые URL-адреса, но также и память, так что если пользователь возвращается к более раннему меню, то выбранные детали в этом меню отображаются повторно.
Для вашего конкретного запроса скрыть идентификатор в «show»/ 42 «Вы, вероятно, можете обработать это аналогичным образом или сконфигурировать Grails для использования« show? Id = 42 »вместо этого, но у нас нет этого требования, поэтому я не стал вдаваться в подробности.Удачи!
Забыл упомянуть: это не увеличит безопасность, поскольку ссылки будут по-прежнему содержать идентификаторы, это только очистит адресную строку.
Вот пример кода, который должен работать,Если вызывается show? Id = 42, он сохраняет id = 42 в сеансе, затем перенаправляет на просто show, а id = 42 добавляется в параметры перед дальнейшей обработкой.Он делает то, что вы хотите, но, как прокомментировано, это не всегда может быть разумно.
def show = {
if (request.method == 'GET' && !request.queryString) {
if (session[controllerName]) {
params.putAll(session[controllerName])
// Add the typical code for show here...
}
} else {
session[controllerName] = extractParams(params)
redirect(action: 'show')
return
}