Играть в! framework - обрабатывать POST-запрос

это маршрут для обработки 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>

У меня два вопроса:

  1. какова должна быть ценность действия? это "войти/отправить"?
  2. как вы передаете эту форму для обработки в функции loginSubmit?

Благодарность


person socksocket    schedule 21.08.2012    source источник


Ответы (2)


Если это форма POST, вам не нужно объявлять параметры в route:

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...");
}

Помощники формы шаблона

Существуют также помощники шаблонов форм, доступные для создания форм в шаблоне 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 формами.

person biesior    schedule 21.08.2012
comment
Работает ли это также для Scala? У меня не работает POST и приходится переключаться на GET запросы, так как в объектном запросе ничего нет - person LowFieldTheory; 18.02.2014
comment
У меня не получилось получить форму с помощью form().bindFromRequest(); Нужно использовать Form.form().bindFromRequest(); как показано здесь playframework.com/documentation/2.3.x/JavaForms - person Daniel Witurna; 08.05.2014
comment
Ответ был написан для Play 2.0.x, а в 2.1.x он был переработан командой, в любом случае это не проблема, так как вы можете просто использовать правильный импорт... import static play.data.Form.form; - person biesior; 09.05.2014

В Play Framework версии 2.5.x Form.form( ) устарела, и вам следует использовать внедрить FormFactory

Здесь вы можете найти пример: Форма метода (класс) из класса Form устарела в Play! Фреймворк

Импорт:

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...");
}
person m0ncld    schedule 04.07.2017