我有一个应用程序,我正在尝试升级到Play 2.0.2(来自Play 2.0.1)。我有这段代码可以在Play 2.0.1上运行但不再是
@javascriptRouter("jsRoutes")(
routes.javascript.Contacts.invite,
routes.javascript.Contacts.remove
)
编译器抱怨:
[error] /myprojectdir/target/scala-2.9.1/src_managed/main/views/html/Contacts/list.template.scala:75: Cannot find any HTTP Request Header here
[error] """),_display_(Seq[Any](/*41.2*/javascriptRouter("jsRoutes")(
[error] ^
[error] one error found
[error] {file:/myprojectdir/}projectname/compile:compile: Compilation failed
[error] Total time: 9 s, completed 11.07.2012 11:38:51
这已在邮件列表中注意到,一位用户有fixed the problem。我知道有一些隐含的参数需要传递,但我不知道如何做到这一点。我尝试根据提到的example file将(?)这个添加到我的模板中,基本上从第一行改变我的模板
@(currentUser: User, inviteForm: Form[controllers.Contacts.InviteForm])
到
@(currentUser: User, inviteForm: Form[controllers.Contacts.InviteForm])(implicit request: RequestHeader)
但这似乎改变了模板的类型签名(?),这不是我想要发生的。
有什么建议吗?所有带(?)的东西都是我不太确定的东西。之前我曾在Scala中进行过一些隐式转换,但我不确定Play对我的期望是什么,以及我是在做scala还是出错。
编辑:the bugtracker中有相应的票证。
答案 0 :(得分:1)
这是你应该做的。请注意,在您的控制器中,您只需从
更新即可def foo() = Action {
...
Ok(views.html.contact.list())
}
到
def foo() = Action { implicit request =>
...
Ok(views.html.contact.list())
}
答案 1 :(得分:0)
如果您使用的是Java控制器,则应使用java javascript路由方法。 见this part of the java guide
混合两种语言都很好,但对于路由,您应该坚持使用控制器的语言风格。另一种选择是编写一个单独的scala控制器并调用这些方法。