我有服务器,我应该在按下按钮时发出请求,我也必须调用这个方法,当它工作时我应该解析 json 但我看不到 Controller 方法,只有主方法可用
如何调用
<input type="submit" onclick="@routes.Login.resp()" value="LOGIN" >
因为它不起作用无法解析符号
GET /login controllers.Login.main()
我的 Controller :
package controllers;
import play.libs.F;
import play.libs.WS;
import play.mvc.Controller;
import play.mvc.Result;
public class Login extends Controller {
public static Result main() {
return ok(views.html.login.render());
}
public static F.Promise<Result> resp() {
String feedUrl="http://validate.jsontest.com/?json=%7B%22key%22:%22value%22%7D";
final F.Promise<Result> resultPromise = WS.url(feedUrl).get().flatMap(
new F.Function<WS.Response, F.Promise<Result>>() {
public F.Promise<Result> apply(WS.Response response) {
return WS.url(response.asJson().findPath("empty").asText()).get().map(
new F.Function<WS.Response, Result>() {
public Result apply(WS.Response response) {
return ok("size" + response.asJson().findPath("count").asInt());
}
}
);
}
}
);
return resultPromise;
}
}
查看:
<!--
Author: W3layouts
Author URL: http://w3layouts.com
License: Creative Commons Attribution 3.0 Unported
License URL: http://creativecommons.org/licenses/by/3.0/
-->
<!DOCTYPE html>
<html>
<head>
<title>LOGIN</title>
<meta charset="utf-8">
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/stylelogin.css")">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="application/x-javascript"> addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false); function hideURLbar(){ window.scrollTo(0,1); } </script>
<!--webfonts-->
<link href='http://fonts.googleapis.com/css?family=Open+Sans:600italic,400,300,600,700' rel='stylesheet' type='text/css'>
<!--//webfonts-->
</head>
<body>
<!-----start-main---->
<div class="main">
<div class="login-form">
<h1>Member Login</h1>
<div class="head">
<img src="@routes.Assets.at("images/user.png")" alt=""/>
</div>
<form>
<input type="text" class="text" value="USERNAME" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'USERNAME';}" >
<input type="password" value="Password" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Password';}">
<div class="submit">
<input type="submit" onclick="@routes.Login.main()" value="LOGIN" >
</div>
</form>
</div>
<!--//End-login-form-->
<!-----start-copyright---->
<!-----//end-copyright---->
</div>
<!-----//end-main---->
</body>
</html>
我不确定我是否也正确解析 json,如何发出正确的 GET、POST 请求并解析它
最佳答案
据我所知,通过 onclick 属性,您总是在 JavaScript 中调用函数。如果您想指定一个 URL,您需要将其放入表单标签中,并使用类似 <form action="@routes.Login.main()">
的操作属性。 .
HTML 表单标记的默认设置是发送 GET 。如果您想发送 POST,则必须通过附加的 method="post"
来指定它。喜欢 <form action="@routes.Login.main()" method="post">
。但是你也必须改变你的路由:POST /login controllers.Login.main()
。如果您想发布登录数据,我强烈建议您使用 POST,因为通过 GET,您的数据(包括密码)会出现在 URL 的查询字符串中。
另外你的@routes.Login.main()
方法只返回登录 View return ok(views.html.login.render());
。相反,它应该评估您发送的表单数据。
关于java - 无法从 View 调用 Play Framework 静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31479259/