如何使用 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>
我想使用 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>