在我目前的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
答案 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)