Frage

this is the route to handle the login POST request:

POST  /login/submit                 controllers.Users.loginSubmit(user : String, password : String)

this is the 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>

I got two questions:

  1. what should be the value of action? is it "login/submit"?
  2. how do you pass this form to be handled in the loginSubmit function?

thanks

War es hilfreich?

Lösung

If it's POST form, you don't need to declare params in the route:

POST  /login/submit           controllers.Users.loginSubmit()

Template:

<!-- 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:

import play.data.DynamicForm;
import play.data.Form;

Controller:

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

Template form helpers

There are also form template helpers available for creating forms in Play's template so the same can be done as:

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

    <input type="submit" value="Login" />
}

They are especially useful when working with large and/or pre-filled forms

Andere Tipps

In Play Framework version 2.5.x Form.form() is deprecated and you should use inject a FormFactory

Here you can find example: The method form(Class) from Form class is deprecated in Play! Framework

Import:

import play.data.DynamicForm;
import play.data.FormFactory;

Inject:

@Inject FormFactory formFactory;

Controller:

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...");
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top