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

How to pass arguments using java script window.location to a java method in play framework?

我想使用 java 脚本中的 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)在客户端是运行,所以接下来的代码就不行了"as expected":

<script>
  function displayPopUp(stri) {
    window.location = "@routes.UserController.deleteUser(stri)";
  }
</script>

解决方案

Java脚本反向路由:

https://www.playframework.com/documentation/2.6.x/JavaJavascriptRouter https://www.playframework.com/documentation/2.6.x/ScalaJavascriptRouting

快速示例:

在控制器中创建一个javascript路由动作:

如果你使用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>