HackU
HackU

Reputation: 295

Play 2.0 framework - POST parameters

I'm trying to POST parameters to Action, and wrote in the routes:

# Home page
GET    /                         controllers.Application.index()

POST   /login/name:/password:    controllers.Application.login(name, password)

and I have an Action

public static Result login(String name, String password) {
    return ok(name + " "  + password);
}

my form is

<form action="/login" method="post">

    <input name="name" type="text" id="name">
    <input name="password" type="password" id="password">
    <input type="submit" value="Login">

</form>

And it doesn't work

For request 'POST /login' [Missing parameter: name]

What am i doing wrong?

Upvotes: 5

Views: 7190

Answers (3)

Sushant Adhikari
Sushant Adhikari

Reputation: 41

Though an old post, but if anyone new comes to the question. We should not add parameters, when you are using post, also if you did use parameters, it would be GET /login/:name/:password controllers.Application.login(name: String, password: String)

For post, don't add parameters and bind it to a case class inside the controllers and access the variables.

Upvotes: 0

Howard
Howard

Reputation: 1449

Simply change the route to the following:

POST   /login    controllers.Application.login(name, password)

By NOT including the dynamic names (:name and :password) in the routing path, the assumption is that the variables come from the request (IE: your html inputs)

The error you are getting indicates that name and password do not appear in the url path... which is correct because the path you specified in your routes indicates the path should look something like this:

/login/myname/mypassword

Please check http://www.playframework.org/documentation/2.0.1/JavaRouting and look at the section called "Call to action generator method"

Upvotes: 3

asawilliams
asawilliams

Reputation: 2938

your route should not include dynamic parts (name, password) since the data is in the body and not the url

Upvotes: 3

Related Questions