[英]How to pass arguments using java script window.location to a java method in play framework?
我想使用javascript中的window.location在我的java文件中调用一个带参数的方法。 我尝试了不同的方法,但无法调用该函数。 当我尝试打印我传递的值时,它会记录在控制台中,但是当我尝试在方法中调用它时,它抛出了未找到值的错误。 我应该对我的代码进行哪些更改以调用该方法?
我为 getUsers 所做的没有参数的调用工作正常。
对于带参数的调用,我试图将它作为一个单独的字符串并尝试连接,然后分配给 window.location,即使它没有工作。 我想在我的控制器中成功调用该方法。
尝试使用单引号、@ 和 $。
<script>
function displayPopUp(stri) {
window.location = "@routes.UserController.deleteUser(stri)";
}
window.location = "@routes.UserController.getUsers()";
</script>
简而言之 - 这是不可能的。
@routes.UserController.deleteUser(stri)
在服务器端编译, function displayPopUp(stri)
在客户端运行,所以接下来的代码不会“按预期”工作:
<script>
function displayPopUp(stri) {
window.location = "@routes.UserController.deleteUser(stri)";
}
</script>
解决方案
Javascript反向路由:
https://www.playframework.com/documentation/2.6.x/JavaJavascriptRouter https://www.playframework.com/documentation/2.6.x/ScalaJavascriptRouting
快速示例:
在控制器中创建一个 javascriptRoutes操作:
如果您使用Java :
public Result javascriptRoutes() {
return ok(JavaScriptReverseRouter.create(
"jsRoutes", routes.javascript.UserController.deleteUser()))
.as("text/javascript");
}
如果您使用Scala :
def javascriptRoutes = Action { implicit request =>
Ok(
JavaScriptReverseRouter("jsRoutes")(
routes.javascript.UserController.deleteUser
)
).as("text/javascript")
}
添加相应的路线:
GET /javascriptRoutes controllers.Application.javascriptRoutes
加载javascript路由器:
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
现在您可以在客户端javascript 中使用它们
<script>
function displayPopUp(stri) {
window.location = jsRoutes.controllers.UserController.deleteUser(stri).url;
}
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.