Grails - сохранение состояния / веб-потока с использованием компонентов ajax - PullRequest
1 голос
/ 12 марта 2012

Если у меня есть страница, которая генерирует результаты поиска на основе некоторых компонентов ajax и вызова метода контроллера, каков наилучший способ сохранить состояние этой страницы (с результатами поиска), чтобы я мог вернуться в любое указать в сессии, чтобы снова увидеть эту страницу?

1) Поиск, получение результатов 2) Внесите некоторые изменения на другой странице 3) Вернитесь к результатам поиска, см. Ту же страницу, что и 1, оставленную с.

Я читал о веб-потоках (которые кажутся ненужными и более формальными, чем то, что мне нужно) и состояниях сохранения AJAX, но также кажется неправильным. Также увидел, что Grails не выходит из коробки с этой функциональностью (что кажется странным для веб-фреймворка).

Edit:

Как мне сохранить этот список searchResults, который заполняется вызовом из моего контроллера, для этого сеанса? Я думаю, что мне просто не хватает этого моста между моей логикой и сохранением сессии.

class SearchService {

boolean transaction = false
static scope = 'session'
def searchResults

private Contact[] updateContactSearchList(String ns, Company c, String si, String res) {

    def nameSearch = ns
    def company = Company.get(c?.id)
    def showInactives = si
    def reset = res

    if(res == "true") {
        render(template:'searchResults', model: [searchResults:"", total: 0])
        return
    }

    if(showInactives == "on" && nameSearch == "" && company != null) {

        searchResults = Contact.withCriteria {
            eq('company', company)
            and {
                eq('isActive', false)
            }
        }
       searchResults.sort{it.lastName}
       return searchResults 
    }
    else if(showInactives == "on" && nameSearch == "" && company == null) {

        searchResults = Contact.withCriteria {
            eq('isActive', false)
        }
       searchResults.sort{it.lastName}
       return searchResults 
    }
    else if(showInactives == "on" && nameSearch != "" && company != null) {

       searchResults = Contact.withCriteria {
            eq('company', company)
            and {
                eq('isActive', false)
            }
            or {
                ilike('firstName', '%' + nameSearch + '%')
                ilike('lastName', '%' + nameSearch + '%')
                ilike('fullName', '%' + nameSearch + '%')
            }
        }
       searchResults.sort{it.lastName}
       return searchResults 
    }
    else if(showInactives == "on" && nameSearch != "" && company == null) {

        searchResults = Contact.withCriteria {
            eq('isActive', false)
            or {
                ilike('firstName', '%' + nameSearch + '%')
                ilike('lastName', '%' + nameSearch + '%')
                ilike('fullName', '%' + nameSearch + '%')
            }
        }
       searchResults.sort{it.lastName}
       return searchResults

    }

    else if(showInactives == null && nameSearch == "" && company != null) {

        searchResults = Contact.withCriteria {
            eq('isActive', true)
            and {
                eq('company', company)
            }
        }
       searchResults.sort{it.lastName}
       return searchResults

    }
    else if(showInactives == null && nameSearch == "" && company == null) {

        searchResults = Contact.withCriteria {
            eq('isActive', true)
        }
       searchResults.sort{it.lastName}
       return searchResults

    }
    else if(showInactives == null && nameSearch != "" && company != null) {

        searchResults = Contact.withCriteria {
            eq('isActive', true)
            and {
                eq('company', company)
            }
            or {
                ilike('firstName', '%' + nameSearch + '%')
                ilike('lastName', '%' + nameSearch + '%')
                ilike('fullName', '%' + nameSearch + '%')
            }
        }
       searchResults.sort{it.lastName}
       return searchResults

    }
    else if(showInactives == null && nameSearch != "" && company == null) {

        searchResults = Contact.withCriteria {
            eq('isActive', true)
            or {
                ilike('firstName', '%' + nameSearch + '%')
                ilike('lastName', '%' + nameSearch + '%')
                ilike('fullName', '%' + nameSearch + '%')
            }
        }
       searchResults.sort{it.lastName}
       return searchResults

    }
    else {
        //log error
    }
}

}

1 Ответ

0 голосов
/ 12 марта 2012

Я бы порекомендовал создать службу сессий, например:

class SearchService {
    static scope = "session"
    def results

}

, которая будет обрабатывать запросы к поисковой системе и сохранять их в объекте «результатов».Затем javascript веб-компонентов должен обращаться к этому объекту и отображать его напрямую, без необходимости повторной отправки запроса - при условии, что вы хотите получить те же результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...