【问题标题】:Play! framework - handle a POST request玩!框架 - 处理 POST 请求
【发布时间】:2012-08-17 01:14:18
【问题描述】:

这是处理登录 POST 请求的路由:

POST  /login/submit                 controllers.Users.loginSubmit(user : String, password : String)

这是 login.scala.html:

<form method="post" action="???">
  <input type="text" name="username" /><br/>
  <input type="password" name="password" /><br/>

  <input type="submit" value="Login" />
</form>

我有两个问题:

  1. 行动的价值应该是什么?是“登录/提交”吗?
  2. 如何将这个表单传递给 loginSubmit 函数来处理?

谢谢

【问题讨论】:

    标签: java http web playframework-2.0 web-development-server


    【解决方案1】:

    如果是POST形式,则不需要在route中声明params:

    POST  /login/submit           controllers.Users.loginSubmit()
    

    模板:

    <!-- syntax: @routes.ControllerName.methodName() -->
    <form method="post" action="@routes.Users.loginSubmit()">
      <input type="text" name="username" /><br/>
      <input type="password" name="password" /><br/>
    
      <input type="submit" value="Login" />
    </form>
    

    进口:

    import play.data.DynamicForm;
    import play.data.Form;
    

    控制器:

    public static Result loginSubmit(){
        DynamicForm dynamicForm = Form.form().bindFromRequest();
        Logger.info("Username is: " + dynamicForm.get("username"));
        Logger.info("Password is: " + dynamicForm.get("password"));
        return ok("ok, I recived POST data. That's all...");
    }
    

    模板表单助手

    还有 form template helpers 可用于在 Play 的模板中创建表单,因此可以这样做:

    @helper.form(action = routes.User.loginSubmit()) {
        <input type="text" name="username" /><br/>
        <input type="password" name="password" /><br/>
    
        <input type="submit" value="Login" />
    }
    

    它们在处理大型和/或pre-filled 表单时特别有用

    【讨论】:

    • 它是否也适用于 Scala?对我来说,不能使用 POST,我必须切换到 GET 请求,因为对象请求中没有任何内容
    • 使用“form().bindFromRequest();”获取表单对我不起作用必须使用“Form.form().bindFromRequest();”如此处所示playframework.com/documentation/2.3.x/JavaForms
    • 答案是为 Play 2.0.x 编写的,在 2.1.x 中它被团队重构了,无论如何这不是问题,你可以使用正确的导入...import static play.data.Form.form;
    【解决方案2】:

    在 Play Framework 版本 2.5.x Form.form() is deprecated 中,您应该使用 inject a FormFactory

    您可以在此处找到示例:The method form(Class) from Form class is deprecated in Play! Framework

    进口:

    import play.data.DynamicForm;
    import play.data.FormFactory;
    

    注入:

    @Inject FormFactory formFactory;
    

    控制器:

    public static Result loginSubmit(){
        DynamicForm dynamicForm = formFactory.form().bindFromRequest();
        Logger.info("Username is: " + dynamicForm.get("username"));
        Logger.info("Password is: " + dynamicForm.get("password"));
        return ok("ok, I recived POST data. That's all...");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 2011-08-21
      • 2021-05-06
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多