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」を設定する必要がありますか?
あなたからの助けを得ることを願っています。
事前にどうもありがとうございました。
乾杯、
マルコ
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)
}
}
Grailsの新しいバージョン(> 2.2)の場合:
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)
...
}