#grails
#grails
Вопрос:
Предыстория: Я создал свой собственный TagLib для приложения. Один из тегов должен зависеть от текущего URL запроса (от параметров path amp; url). У меня есть два gsp-файла — layout и обычная страница.
Проблема: я пытался получить текущий URL запроса из обработчика тегов, используя это:
request.requestURI
Но вместо того, что у меня есть в браузере
http://localhost:8888/gbv/999/index
По какой-то причине он вернет что-то вроде этого, когда тег вызывается с обычной страницы:
/gbv/grails/index.dispatch
И он вернет это, когда тег вызывается из шаблона (что нормально):
/gbv/999/index
Вопрос:
Как сделать одно (или оба из этих)
- Получите тот же экземпляр «params», который доступен с контроллера (без изменения контроллера)
- Получить текущий URL запроса (такой же, как у пользователя в браузере)
Ответ №1:
Вы должны быть в состоянии получить ссылку на параметры, просто сославшись params
на класс тегов.
Если вы хотите воссоздать полный путь запроса (как показано в браузере), вы можете сделать это, используя методы request
объекта, который является экземпляром HttpServletRequest, например
- getContextPath()
- getRequestURI()
- getServerName()
- getServerPort()
Комментарии:
1. Спасибо! На самом деле это было очень просто. Просто используйте «параметры». Все текущие параметры уже есть. Кстати: ни один из других вариантов не полезен.
2. Нет, это НЕ работает. «параметры» недоступны в модели. Я все еще ищу рабочее решение.
3. @Panique Я не говорил, что это доступно в модели (классе домена), я сказал, что это доступно в TagLib. Параметры также доступны в контроллере или GSP
Ответ №2:
используйте следующее
request.forwardURI
Ответ №3:
используйте ${params.id}
для получения идентификатора текущего элемента, который вы просматриваете.
Кроме того,
используйте ${controllerName}
для получения имени контроллера.
используйте ${actionName}
для получения имени действия