Как получить доступ к URL (или параметрам grails) вне контроллера?

#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
  

Вопрос:
Как сделать одно (или оба из этих)

  1. Получите тот же экземпляр «params», который доступен с контроллера (без изменения контроллера)
  2. Получить текущий URL запроса (такой же, как у пользователя в браузере)

Ответ №1:

Вы должны быть в состоянии получить ссылку на параметры, просто сославшись params на класс тегов.

Если вы хотите воссоздать полный путь запроса (как показано в браузере), вы можете сделать это, используя методы request объекта, который является экземпляром HttpServletRequest, например

  • getContextPath()
  • getRequestURI()
  • getServerName()
  • getServerPort()

Комментарии:

1. Спасибо! На самом деле это было очень просто. Просто используйте «параметры». Все текущие параметры уже есть. Кстати: ни один из других вариантов не полезен.

2. Нет, это НЕ работает. «параметры» недоступны в модели. Я все еще ищу рабочее решение.

3. @Panique Я не говорил, что это доступно в модели (классе домена), я сказал, что это доступно в TagLib. Параметры также доступны в контроллере или GSP

Ответ №2:

используйте следующее

request.forwardURI

Ответ №3:

используйте ${params.id} для получения идентификатора текущего элемента, который вы просматриваете.


Кроме того,
используйте ${controllerName} для получения имени контроллера.
используйте ${actionName} для получения имени действия