当前位置: 代码迷 >> java >> 无法从视图调用Play Framework静态方法
  详细解决方案

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

热度:71   发布时间:2023-07-31 11:22:55.0

我有服务器,我应该在按下按钮时发出请求,我也必须调用此方法,当它起作用时,我应该解析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请求并解析它

据我所知,使用onclick属性,您始终会在JavaScript中调用一个函数。 如果要指定URL,则需要使用诸如<form action="@routes.Login.main()">类的action属性将其放入表单标签中。

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

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

  相关解决方案