Для этого быстрого примера давайте определим следующее представление:
приложение / просмотров / index.scala.html
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
@(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 / маршруты
|
1
2
3
4
5
|
# Home pageGET / controllers.Application.indexPOST /scala controllers.ScalaPoster.savePOST /java controllers.JavaPoster.save |
С java, напрямую обращаясь к телу запроса:
приложение / контроллеры / JavaPoster.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
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:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
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, доступ к телу:
приложение / контроллеры / ScalaPoster.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
package controllersimport 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))) }} |
И определение формы
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package controllersimport play.api.mvc._import play.api.data.Formimport play.api.data.Forms.tupleimport play.api.data.Forms.textobject 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 с
|
1
|
def values = form.bindFromRequest()(request).data |
Вы также можете играть с кортежами и выпускать что-то вроде
|
1
2
|
val data = form.bindFromRequest.getOk(views.html.index("You are %s, %s".format(data._2, data._1))) |
или же
|
1
2
|
val (name, surname) = form.bindFromRequest.getOk(views.html.index("You are %s, %s".format(surname, name))) |
И, конечно же, если вы просто хотите прочитать одно опубликованное значение, вы можете выполнить:
|
1
|
def name = Form("scala_name" -> text).bindFromRequest.get |
Есть несколько способов добиться этого. Надеюсь, это послужит полезным напоминанием.
Справка: Play Framework опубликовал ценности, вновь пересмотренные от нашего партнера по JCG Себастьяна Скарано на платформе « Развлекайся с Play»! блог.