玩!框架 - 处理 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