2014-04-09 2 views
2

세션 개체를 스칼라로 변환하여에있는 세션 개체로 변환 할 수 있습니까?을 재생 하시겠습니까? 스칼라 세션 개체를 Play Framework의 Java 세션 개체로 변환

은 내가 Model method 같이 java에 기록이 있습니다

public void DoSomething(Request request, Session session) 
{ 
     String fancyValue = request.getQueryString("userInput"); 
     session.put("Some Fancy Stuff",fancyValue); 
} 

Controller 방법은 같은 scala 작성 :

def showHomePage = Action { implicit request => 

    val JRequest = play.core.j.JavaHelpers.createJavaRequest(request) 
    val JSession // conversion needed from request.session to play.mvc.Http.Session 

    new SomeModel().DoSomething(JRequest,JSession) 

    // would this include the updates done to the session in the java model? 
    Ok("Testing Stuff").withSession(session) 
} 
+0

클라이언트에서 세션을 유지하려면 [확인 (Stuff)]. withSession (/ * updated session * /)'이 아니어야합니까? (아마도 세션 쿠키에 너무 많은 데이터를 저장하는 대신 서버 측 캐시에 대한 핸들을 사용하는 것이 좋습니다.) –

+0

@RichardClose 나는 다른 것에 초점을 맞추고 있었고 그것을 잊어 버렸고, 편집하고 그 세부 사항을 포함 할 것이고, 간단한 ID만을 저장할 수있는 세션을 사용하고있다. 그래서 그것을 채워 넣을 기회가 없다. 고마워. – somedev

답변

2

당신 look at the docs of the JavaHelpers package 경우, 함수 createJavaContext가 있음을 알 수있을 것입니다. 이를 사용하여 play.mvc.Http.Context을 얻을 수 있으며 play.mvc.Http.Requestplay.mvc.Http.Session을 추출 할 수 있습니다.

val java_ctx = play.core.j.JavaHelpers.createJavaContext(request) 
val java_request = java_ctx.request() 
val java_session = java_ctx.session() 
+0

내 컨트롤러에서 Ok ("some string"). withSession (session)을 반환하면 모델의 java_session이 유지됩니까? – somedev

+0

자바 세션이 Java HashMap이기 때문에 변환에 대해서는 잘 모르겠지만'withSession' 메소드는 스칼라 맵과 같은 것을 매개 변수 (즉'(String, String)'튜플 시퀀스)가 필요합니다. 그러나 그 변환은 제쳐두고, 그렇습니다.하지만 @RichardClose가 이미 언급 한 것처럼, 세션 쿠키 안에 너무 많은 내용을 넣지 않도록해야합니다. 가장 좋은 방법은 세션 쿠키 내에 토큰 (세션 ID)을 넣는 것입니다. 서버 측의 나머지 부분 – Carsten

+0

현재 ID를 저장하는 데만 세션을 사용하고 있습니다. 클라이언트 측에서 쿠키를 사용하여 세션을 저장하고 4KB로 제한된다는 것을 알고 있습니다. 변환하는 방법을 알아야하고 java에서 세션을 업데이트하면 스칼라 컨트롤러의 업데이트가 유지됩니다. 감사합니다 :) – somedev

관련 문제