Grails получают сеанс и управление в классе обслуживания - PullRequest
15 голосов
/ 15 августа 2011

У меня проблема с сеансом Grails.Я думал о наличии класса обслуживания для обработки моего сеанса.Поэтому я создал класс под названием "SessionService" (в каталоге grails-app / services / grails /).

class SessionService {
    static transactional = true
    GrailsWebRequest request = RequestContextHolder.currentRequestAttributes()
    GrailsHttpSession session = request.session

    def setTestvar(String value) {
        if (session != null)
            session.setAttribute("sTeststring", value)
    }

    def getTestvar() {
        if (session != null)
            session.getAttribute("sTeststring")
    }
}

Проблема теперь в том, что я получаю исключение Nullpointer-Exception: " Метод вызвал исключение 'java.lang.NullPointerException'. Не удается оценить org.codehaus.groovy.grails.web.servlet.mvc.GrailsHttpSession.ToString ()".

Использование моего класса обслуживания, например, в контроллере:

class SampleController {

    SessionService sessionService

    def selectAnything = {

        sessionService.setTestvar("test-value")
        render(view: "testview")
    }
}

Что я здесь не так делаю?Это правильный путь?Или я должен установить "session = request.session" в каждом методе?

Надеюсь получить помощь от вас.

Большое спасибо заранее.

Приветствия,

Марко

Ответы [ 3 ]

32 голосов
/ 15 августа 2011

откуда берется RequestContextHolder?Его не видно в Grails 3.3.8 (как минимум в плагине)

17 голосов
/ 03 декабря 2012

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

package beecomplete

import org.codehaus.groovy.grails.web.util.WebUtils

class HelperService {

    public User getCurrentUser() {
        def webUtils = WebUtils.retrieveGrailsWebRequest()
        return User.findById(webUtils.getSession().userid)
    }

    public Object getModelAttribute(String key) {

        def webUtils = WebUtils.retrieveGrailsWebRequest()
        return webUtils.getCurrentRequest().getAttribute(key)
    }
}
9 голосов
/ 14 октября 2014

Для новых версий (> 2.2) Grails:

import org.codehaus.groovy.grails.web.util.WebUtils

....
HttpServletRequest request = WebUtils.retrieveGrailsWebRequest().currentRequest
HttpSession session = request.session
...