我已经定义了这样的路线:
GET /login controllers.Login.showForm(continue: Option[String] = None)
Login.showForm是这样的:
def showForm(continue: Option[String] = None) = Action { implicit request =>
val nextPage = continue match {
case None => routes.CtrlIndex.index().absoluteURL().toString()
case Some(page) => page
}
Ok(views.html.login(nextPage))
}
现在,使用操作组合我做了一个经过身份验证的操作,当用户未经过身份验证时执行此操作:
val continue =
if (request.method == "GET") request.uri
else routes.CtrlIndex.index().absoluteURL().toString() // This is not code duplication for reasons that are out of the scope of this question.
Redirect(routes.Login.showForm(Some(continue)))
使用此消息无法编译:
too many arguments for method showForm: ()play.api.mvc.Call
[error] Redirect(routes.Login.showForm(Some(continue)))
更改路线定义使其有效:
GET /login controllers.Login.showForm(continue: Option[String])
但是当我使用javascript反向路由器时,它会在生成的javascript中生成以下错误:
SyntaxError: missing formal parameter
function(continue) {
---------^
我已经尝试了函数签名定义的所有组合,但是当javascript工作时,另一个停止工作或反过来。我该如何使用
request.uri
以获取返回绝对路径的内容。提前致谢
PS。如果你看到西班牙语的东西,让我知道,我会解决它,代码最初是西班牙语;在我阅读之后,我可能已经遗漏了一些东西。
答案 0 :(得分:1)
可能的原因是“继续”是javascript中的reserved word
Play的javascript反向路由器使用routes文件中指定的控制器路径和方法参数构造给定路由;在你的情况下,“继续”可能会绊倒js解析器,就像一个名为“delete”的方法,它在服务器端运行良好,但会在客户端反向路由器中爆炸。
对于较新的浏览器,这可能不是问题,但在旧版本的Internet Explorer(我们需要支持)上被“删除”方法名称所咬。