3
votes

I'm using scala 2.10 and playframework 2.2.1

Lets assume following routing:

GET    /users/page/:page/limit/:limit    controllers.Users.showUsers(page: Int, limit: Int)

I'd like to add search form with GET method and few fields and also add some pagination. For example, after form submission url will look like this:

http://example.com/users/page/1/limit/20?login=someLogin&email=

To avoid url hardcoding in pagination code I'm using reverse routing such as @routes.Users.showUsers(currentPage, limit) inside my template. Is it possible to add also GET parameters to resulting url without some ugly code like fold through Form inside template, etc?

1

1 Answers

4
votes

Yes, kind of. Optional route parameters have been removed in Play 2.2, so you have to define default values for pagination parameters. The reverse router will know how to fill them in.

GET    /users/page/:page/limit/:limit       controllers.Users.showUsers(page: Int, limit: Int, login: String ?= "", email: String ?= "")

object Users extends Controller {

     def showUsers(page: Int, limit: Int, login: String = "", email: String = "") {
          // show those users..
     }
}

@routes.Users.showUsers(3, 20, "someLogin") would produce the URL: /users/page/3/limit/20?login=someLogin

Not particularly pretty, but better than hard-coding URLs.