【问题标题】:How to pass arguments using java script window.location to a java method in play framework?如何使用java脚本window.location将参数传递给play框架中的java方法?
【发布时间】:2019-08-01 07:04:33
【问题描述】:

我想在我的 java 文件中使用 javascript 中的 window.location 调用带有参数的方法。我尝试了不同的方法,但无法调用该函数。当我尝试打印我传递的值时,它会登录到控制台中,但是当我尝试在方法中调用它时,它会抛出 value not found 错误。我应该对我的代码进行哪些更改来调用该方法?

我为 getUsers 所做的不带参数的调用运行良好。

对于使用参数进行调用,我尝试将其作为单独的字符串并尝试连接然后分配给 window.location,即使这样它也没有工作。我想在我的控制器中成功调用该方法。

尝试使用单引号、@ 和 $。

<script>
        function displayPopUp(stri) {

                window.location = "@routes.UserController.deleteUser(stri)";


        }
window.location = "@routes.UserController.getUsers()";
    </script>

【问题讨论】:

  • 需要您发布更多代码,以便任何人能够为您提供帮助。
  • function displayPopUp(stri) { var r = confirm("是你确定要删除吗?"); if (r == true) { window.location = '@routes.UserController.deleteUser(stri)'; } else { window.location = "@routes.UserController.getUsers()"; } }
  • 是的,要添加更多代码,我需要输入更多数据。无论我尝试输入多少信息,它都会给我输入更多数据的错误,因为您的代码似乎更多。

标签: javascript java html playframework playframework-2.0


【解决方案1】:

简而言之,这是不可能的。

@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 action

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

【讨论】:

    猜你喜欢
    • 2018-08-14
    • 2016-07-17
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多