无法从视图中调用Play Framework静态方法

时间:2015-07-17 15:24:06

标签: java json playframework playframework-2.2

我有服务器,我应该按下按钮请求我也必须调用这个方法,当它工作时我应该解析json但我没有看到控制器方法只有主要方法可用

如何致电

 <input type="submit" onclick="@routes.Login.resp()" value="LOGIN" >

因为它没有解决问题无法解决符号

GET     /login                           controllers.Login.main()

我的控制器:

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请求并解析它

1 个答案:

答案 0 :(得分:1)

据我所知,使用onclick属性,你总是在JavaScript中调用一个函数。如果您要指定网址,则需要将其放入带有<form action="@routes.Login.main()">等操作属性的表单标记中。

HTML表单标记的默认设置是发送GET。如果您要发送POST,则必须通过其他method="post" <form action="@routes.Login.main()" method="post">来指定。但是,您还必须更改路由:POST /login controllers.Login.main()。如果您想发布登录数据,我强烈建议您使用POST,因为通过GET,您的数据(包括密码)会显示在您网址的查询字符串中。

此外,您的@routes.Login.main()方法只返回登录视图return ok(views.html.login.render());。相反,它应该评估您发送的表单数据。