Для простоты, основные функции моего приложения - это интерфейс поиска с формой для результатов поиска. Приложение получает эти результаты через SOAP из другого приложения.
В поисковом контроллере мне нужна возможность указать некоторые параметры в перенаправлении, которые не будут отображаться в URL страницы результатов, и другие, которые будут отображаться. Вот пример того, как выглядит перенаправление:
return new ModelAndView(new RedirectView(/results?q=blah, true));
Как видите, мне нужно включить параметр q. Но мне также нужны другие параметры, которые я не хочу отображать на странице результатов URL.
Мое приложение нуждается в возможности выполнять несколько поисков в течение одного сеанса браузера. Например, наличие нескольких вкладок для поиска одновременно. Таким образом, объект сеанса абстрагируется, чтобы содержать карту объектов состояния сеанса. Они содержат данные о состоянии для каждого поиска. Новое состояние сеанса создается каждый раз, когда делается запрос к контроллеру поиска. Это состояние сеанса затем выбирается контроллером результатов.
Наш процесс закладки должен быть полностью свободным от состояния. Таким образом, человек должен иметь возможность добавить URL страницы результатов в закладки или скопировать и вставить ее в новую вкладку или другой браузер. Когда выполняется URL-адрес результатов, контроллер результатов выполняет новый поиск.
Моя проблема заключается в следующем:
Мне нужен способ, чтобы контроллер результатов мог узнать, исходит ли запрос от перенаправления в контроллере поиска или от (закладки / копирования и вставки). Таким образом, он может получить существующие данные о состоянии сеанса или выполнить новый поиск. Если я могу передать скрытый параметр в редиректе из контроллера поиска, например, «запросчик», то я могу использовать простую логику в контроллере результатов для поиска существующего состояния сеанса или запуска нового поиска.
Спасибо
РЕДАКТИРОВАТЬ: Как насчет передачи данных с одного контроллера на другой, не помещая их в URL. Например, доступ к данным модели, переданным из перенаправления контроллера поиска в контроллер результатов вместо представления результатов? Вот конструктор с возможностью скрыть атрибуты модели.
/**
* Create a new RedirectView with the given URL.
* @param url the URL to redirect to
* @param contextRelative whether to interpret the given URL as
* relative to the current ServletContext
* @param http10Compatible whether to stay compatible with HTTP 1.0 clients
* @param exposeModelAttributes whether or not model attributes should be
* exposed as query parameters
*/
public RedirectView(String url, boolean contextRelative, boolean http10Compatible, boolean exposeModelAttributes)
Есть ли другой способ передачи данных с одного контроллера на другой?