玩!框架 - 处理 POST 请求

Posted

技术标签:

【中文标题】玩!框架 - 处理 POST 请求【英文标题】:Play! framework - handle a POST request 【发布时间】: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>

我有两个问题:

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

谢谢

【问题讨论】:

【参考方案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...");

【讨论】:

以上是关于玩!框架 - 处理 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

玩 1.2.4:处理 POST 请求,body 中带有 XML

(gin框架拓展)两种 HTTP 请求方法:GET 和 POST

Springmvc处理post+json数据

Django框架之GET请求和POST请求简介

Django Rest 框架中的发布请求处理

Express框架请求处理机制