Ответ 1
откуда берется RequestContextHolder? Его не видно в Grails 3.3.8 (по крайней мере, в плагине)
У меня проблема с сеансом 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: "Метод threw" исключение 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" в каждом методе?
Надеюсь получить от вас помощь.
Спасибо вам заблаговременно.
Приветствия,
Marco
откуда берется RequestContextHolder? Его не видно в Grails 3.3.8 (по крайней мере, в плагине)
Вот пример кода, в котором я извлекаю данные сеанса и запрашиваю данные из службы, не передавая запрос или объекты сеанса в качестве параметра для службы.
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)
}
}
Для новых версий ( > 2.2) Grails:
import org.codehaus.groovy.grails.web.util.WebUtils
....
HttpServletRequest request = WebUtils.retrieveGrailsWebRequest().currentRequest
HttpSession session = request.session
В более поздних версиях (проверенных в Grails 2.5.0) вы можете просто сделать getSession (true) прямо из службы:
def myServiceMethod() {
def session = getSession(true)
...
}