Grails: повторно использовать заранее определенный список - PullRequest
1 голос
/ 12 сентября 2009

Я новичок в Grails и в настоящее время использую Grails 1.1.1. Я не знаю, как передать список из элемента управления / действия в представление, а затем передать этот же список из этого представления в другое действие. Причина, по которой я это делаю, состоит в том, чтобы повторно использовать предопределенный объект (в данном случае «список»). Вот мой сценарий:

У меня есть представление поиска (search.gsp), которое вызывает действие «поиск», которое запрашивает базу данных, сохраняет результаты в списке (используя критерии гибернации) и отображает этот список в представлении результатов (results.gsp ). В result.gsp у меня есть панель экспорта (с помощью плагина экспорта grails) для экспорта этого списка в файл EXCEL. У меня проблемы с передачей этого списка в представление результатов, чтобы я мог передать его в действие "export".

Я очень ценю помощь, если кто-то может дать совет по этому вопросу. Спасибо.

Ответы [ 2 ]

3 голосов
/ 12 сентября 2009

Поскольку вы хотите передать этот объект нескольким запросам, вам нужно будет сохранить его в пользовательской сессии , например:

def search = {
        session["results"] = queryDatabase(params)
}

def export = {
        def results = session["results"]
}
0 голосов
/ 13 сентября 2009

Как указал Майкл, в вашем сценарии используются разные HTTP-запросы, поэтому вы не можете просто «передать» результаты второму действию так же, как вы можете передать модель из действия контроллера в представление. Хотя предложение Майкла (сохранить результат в пользовательском сеансе), безусловно, будет работать, альтернативный (и IMHO более распространенный) подход будет состоять в том, чтобы передать те же параметры запроса (например, ваш поисковый запрос) в действие экспорта и повторно извлечь данные из БД в вашей экспортной операции.

У такого подхода без сохранения состояния есть несколько преимуществ:

  1. Это более масштабируемо, так как вам не нужно беспокоиться о "загрязнении" сеанса или репликации сеанса в распределенных средах
  2. Вы не столкнетесь с проблемами, если пользователь отправит более одного параллельного поискового запроса (например, в разных вкладках браузера). Это серьезная проблема с сессионным подходом.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...