Question

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

Was it helpful?

Solution

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

OTHER TIPS

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...");
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top