1

ユーザーオブジェクトが非常に必要なので、キャッシュに保存しようと思いました。キャッシュからいつ破棄されるかわからないので、と思いますinterceptor。そこで、次のコードを定義しました。

@Override
public Action<?> onRequest(Request request, Method actionMethod) {
    // find the user based on the userId that is stored in the session
    // scope.
    String userId = session.get("user"); // does not work
    User loggedInUser = (User) Cache.get(userId);
    if (loggedInUser == null) {
        loggedInUser = User.getUerById(userSyscode);
    }
    return super.onRequest(request, actionMethod);
}

私は使用できると思いました:

session.get("user");

しかし、私には、sessionからアクセスできないように見えますがGlobal class、私は何か間違ったことをしていますか?

4

2 に答える 2

7

同様の問題を抱えて、「アクションコンポジション」で解決しました。 http://www.playframework.org/documentation/2.0.1/JavaActionsComposition

または、これはオーバーライドしているコードなので、同じことを実行して、コードをメソッドonRequestに入れるだけでよいと思います。call

public Action onRequest(Request request, Method actionMethod) {
  return new Action.Simple() {
    public Result call(Context ctx) throws Throwable {

      /* your code here */

      return delegate.call(ctx);
    }
  };
}

直接利用できるかどうかはわかりませんsessionが、その時点でctx変数からアクセスできます。のようなものになると思いますctx.session().get("user")

于 2012-05-23T02:16:14.983 に答える
0

Scalaでは、次のコードが機能します。

override def onRouteRequest(request: RequestHeader): Option[Handler] = {
    if(!request.session.get("email").isEmpty){
        //I have session with email
        request.session.apply("email") //this is for getting session
    }
}

request.session.get return Option [String]

request.session.applyは文字列を返します

Play Framework 2 Scala Play.api.mvc.Session

于 2012-12-23T21:15:49.333 に答える