繁体   English   中英

如何使用java脚本window.location将参数传递给play框架中的java方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM