问题
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:
- what should be the value of action? is it "login/submit"?
- how do you pass this form to be handled in the loginSubmit function?
thanks
回答1:
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
回答2:
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...");
}
来源:https://stackoverflow.com/questions/12059147/play-framework-handle-a-post-request