Mam problem z sesją Grails. Myślałem o posiadaniu klasy usług dla mojej obsługi sesji. Stworzyłem więc klasę o nazwie "SessionService" (pod grails-app/services/grails /).Grails pobierają sesję i zarządzanie w klasie usług
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")
}
}
Problem jest teraz, że mogę dostać NullPointer wyjątku. "Metoda wyrzucił wyjątek«java.lang.NullPointerException»nie może oceniać org.codehaus.groovy.grails.web.servlet.mvc.GrailsHttpSession .ToString() ".
Korzystanie z mojej klasy usług, np. w kontrolerze:
class SampleController {
SessionService sessionService
def selectAnything = {
sessionService.setTestvar("test-value")
render(view: "testview")
}
}
Co ja tu robię źle? Czy to właściwa droga? Czy muszę ustawić "session = request.session" w każdej metodzie?
Mam nadzieję, że otrzymam pomoc od Ciebie.
Dziękuję bardzo z góry.
Cheers,
Marco
Hej, Christian, dzięki. Ale nie ma metody "getSession()" - dostępnej w currentRequestAttributes. Wykonanie "manipulacji sesyjnej (ustawianie/otrzymywanie)" może być podatne na błędy, chcę tego uniknąć, utrzymując nazwę i obsługę zmiennej sesji w jednym miejscu ;-) – grailsInvas0r
W jaki sposób sprawdziłeś, czy getSession() nie jest dostępny? Wypróbowałem kod w konsoli Grails i zadziałało. – user852518
Och, przepraszam, działa. ALE mój IntelliJ podkreśla, że ta metoda nie istnieje: -O Również w każdej dokumentacji nie jest dostępna. Tylko stare wyniki google pokazują to rozwiązanie. Nie jestem pewien, czy to zadziała w przyszłości ?! Jestem zaskoczony: -O Moje rozwiązanie było teraz: ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); return servletRequestAttributes.getRequest(). GetSession (true); – grailsInvas0r