与Play Framework 2.0一起使用发布的值而不定义表单映射,可能不像Play 1.x那样明显,这就是为什么我要编写此快速备忘单。
对于此快速示例,让我们定义以下视图:
app / views / index.scala.html
@(message: String)
message: @message <br />
<h2>Scala form</h2>
<form action="@routes.ScalaPoster.save()" method="POST">
scala name: <input name="scala_name"> <br />
scala surname: <input name="scala_surname"> <br />
<input type="submit" value="save">
</form>
<h2>Java form</h2>
<form action="@routes.JavaPoster.save()" method="POST">
java name: <input name="java_name"> <br />
java surname: <input name="java_surname"> <br />
<input type="submit" value="save">
</form>
和以下路由文件:
conf /路由
# Home page
GET / controllers.Application.index
POST /scala controllers.ScalaPoster.save
POST /java controllers.JavaPoster.save
使用Java,直接访问请求正文:
app / controllers / JavaPoster.java
package controllers;
import play.mvc.*;
import views.html.*;
import java.util.Map;
public class JavaPoster extends Controller {
public static Result save() {
final Map<String, String[]> values = request().body().asFormUrlEncoded();
final String name = values.get("java_name")[0];
final String surname = values.get("java_surname")[0];
return ok(index.render(String.format("You are %s, %s",surname, name)));
}
}
或使用DynamicForm:
package controllers;
import play.mvc.*;
import views.html.*;
import play.data.DynamicForm;
public class JavaPoster extends Controller {
public static Result save() {
final DynamicForm form = form().bindFromRequest();
final String name = form.get("java_name");
final String surname = form.get("java_surname");
return ok(index.render(String.format("You are %s, %s",surname, name)));
}
}
现在是scala版本,可以访问主体:
app / controllers / ScalaPoster.java
package controllers
import play.api.mvc._
object ScalaPoster extends Controller {
def save = Action { request =>
def name = request.body.asFormUrlEncoded.get("scala_name")(0)
def surname = request.body.asFormUrlEncoded.get("scala_surname")(0)
Ok(views.html.index("You are %s, %s".format(surname, name)))
}
}
并定义一个表格
package controllers
import play.api.mvc._
import play.api.data.Form
import play.api.data.Forms.tuple
import play.api.data.Forms.text
object ScalaPoster extends Controller {
val form = Form(
tuple(
"scala_name" -> text,
"scala_surname" -> text
)
)
def save = Action { implicit request =>
def values = form.bindFromRequest.data
def name = values("scala_name")
def surname = values("scala_surname")
Ok(views.html.index("You are %s, %s".format(surname, name)))
}
}
请注意上述示例中的隐式请求。 您可以将其显式传递给bindFromRequest
def values = form.bindFromRequest()(request).data
您也可以玩元组并发出类似
val data = form.bindFromRequest.get
Ok(views.html.index("You are %s, %s".format(data._2, data._1)))
要么
val (name, surname) = form.bindFromRequest.get
Ok(views.html.index("You are %s, %s".format(surname, name)))
当然,如果您只想读取一个过帐值,可以发出:
def name = Form("scala_name" -> text).bindFromRequest.get
有几种方法可以实现它。 希望这对您有所帮助。
参考: Play Framework发布了我们的JCG合作伙伴 Sebastian Scarano在“ 玩转Play框架”中 重新审视的价值观 ! 博客。
翻译自: https://www.javacodegeeks.com/2012/07/play-framework-posted-values-revisited.html