玩!framework - 处理POST请求

soc*_*ket 8 java http web-development-server web playframework-2.0

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

POST  /login/submit                 controllers.Users.loginSubmit(user : String, password : String)
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 什么应该是行动的价值?是"登录/提交"?
  2. 如何传递此表单以在loginSubmit函数中处理?

谢谢

bie*_*ior 25

如果是POST形式,则不需要在以下内容中声明参数route:

POST  /login/submit           controllers.Users.loginSubmit()
Run Code Online (Sandbox Code Playgroud)

模板:

<!-- 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>
Run Code Online (Sandbox Code Playgroud)

进口:

import play.data.DynamicForm;
import play.data.Form;
Run Code Online (Sandbox Code Playgroud)

控制器:

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...");
}
Run Code Online (Sandbox Code Playgroud)

模板表单助手

还有表单模板助手可用于在Play模板中创建表单,因此可以这样做:

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

    <input type="submit" value="Login" />
}
Run Code Online (Sandbox Code Playgroud)

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

  • 使用"form().bindFromRequest();"获取表单不起作用.必须使用"Form.form().bindFromRequest();" 如图所示http://www.playframework.com/documentation/2.3.x/JavaForms (2认同)

小智 5

在 Play Framework 版本 2.5.x Form.form() 已弃用,您应该使用注入 FormFactory

在这里您可以找到示例:来自 Form 类的方法 form(Class) 在 Play 中已弃用!框架

进口:

import play.data.DynamicForm;
import play.data.FormFactory;
Run Code Online (Sandbox Code Playgroud)

注入:

@Inject FormFactory formFactory;
Run Code Online (Sandbox Code Playgroud)

控制器:

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...");
}
Run Code Online (Sandbox Code Playgroud)