Play2框架 - 安全的社交会话价值

时间:2014-08-26 06:16:51

标签: java playframework playframework-2.0 web-frameworks securesocial

在我目前的Project I使用Play 2 Framework的安全社交插件。我写了一个函数来计算存储在Session中的我的产品。

    public static Integer cntOrderedProductsFromSession(){

    Integer cnt = 0;
    try {
        List<String> KeyList = new ArrayList<String>(session().keySet());
    for (Iterator<String> iterator = KeyList.iterator(); iterator.hasNext();){
        String name = iterator.next();
        if(name.matches("product.[0-9]*")){
            cnt += Integer.parseInt(session(name));
        }
    }
    return cnt;
    } catch (RuntimeException e){
        return 0;
    }
}

我将我的安全社交登录页面包装在main.hmtl.scala中,在这里我调用我的函数

<p>@Shop.cntOrderedProductsFromSession()</p>

问题是,当我尝试使用cntOrderedProductsFromSession()函数时,我收到错误。 (但只有安全的社交登录页面)

我收到此错误

 java.lang.RuntimeException: There is no HTTP Context available from here.
at play.mvc.Http$Context.current(Http.java:30) ~[play_2.10.jar:2.2.3]
at play.mvc.Controller.session(Controller.java:60) ~[play_2.10.jar:2.2.3]
at controllers.Shop.cntOrderedProductsFromSession(Shop.java:236) ~[classes/:na]
at views.html.main$.apply(main.template.scala:173) ~[classes/:na]
at views.html.custom.login$.apply(login.template.scala:50) ~[classes/:na]
at plugins.NekViews.getLoginPage(NekViews.scala:32) ~[classes/:na]
at securesocial.controllers.LoginPage$$anonfun$login$1.apply(LoginPage.scala:56) ~[securesocial_2.10-2.1.3.jar:2.1.3]
at securesocial.controllers.LoginPage$$anonfun$login$1.apply(LoginPage.scala:42) ~[securesocial_2.10-2.1.3.jar:2.1.3]
at play.api.mvc.ActionBuilder$$anonfun$apply$10.apply(Action.scala:221) ~[play_2.10.jar:2.2.3]
at play.api.mvc.ActionBuilder$$anonfun$apply$10.apply(Action.scala:220) ~[play_2.10.jar:2.2.3]
at play.api.mvc.Action$.invokeBlock(Action.scala:357) ~[play_2.10.jar:2.2.3]
at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:309) ~[play_2.10.jar:2.2.3]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:109) ~[play_2.10.jar:2.2.3]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:109) ~[play_2.10.jar:2.2.3]
at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.2.3]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:108) ~[play_2.10.jar:2.2.3]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:107) ~[play_2.10.jar:2.2.3]
at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:107) ~[play_2.10.jar:2.2.3]
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:100) ~[play_2.10.jar:2.2.3]
at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:481) ~[play-iteratees_2.10.jar:2.2.3]
at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:481) ~[play-iteratees_2.10.jar:2.2.3]
at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:517) ~[play-iteratees_2.10.jar:2.2.3]
at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:517) ~[play-iteratees_2.10.jar:2.2.3]
at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$13.apply(Iteratee.scala:493) ~[play-iteratees_2.10.jar:2.2.3]
at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$13.apply(Iteratee.scala:493) ~[play-iteratees_2.10.jar:2.2.3]
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) [scala-library.jar:na]
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) [scala-library.jar:na]

Thaks 4 help

1 个答案:

答案 0 :(得分:0)

错误很明确。 There is no HTTP Context available from here. 您必须使用上下文将上下文传递给所有视图/函数。

在模板中,可以按如下方式完成:

@(param1:Param1Type)(implicit context:Context) 

@main("Title") {
}

main.scala.html模板中您将拥有以下内容:

@main(title:String)(implicit context:Context)