2012-05-09 17 views
2

私は基本的な検索機能を備えたサイトを作っています。クエリには情報が含まれているため、検索情報を含めるにはcase class Queryがあります。多くの結果があるかもしれないので、ページネーションをサポートする必要があります。Scala Play 2.0 Frameworkでのフォーム提出とページネゴシエーションの検索

ここにフォームの送信を処理するメソッドがあります。ページがブックマーク可能になるようにGETを使用します。

GET /search controllers.Application.submit 

    def submit = Action { implicit request => 
    searchForm.bindFromRequest.fold(
     errors => BadRequest(views.html.index(errors)), 
     query => doSearch(query, 0)) 
    } 

ページネーションをサポートしたいときに問題が発生します。 URLが変更されず、&page=iパラメータだけが追加されることをお勧めします。しかし、おそらくコントローラのsubmitアクションを元に戻したくないかもしれません(しかし、私はここで間違っているかもしれません)。

どうすればよいですか?ページ分割のための別ルートがある場合は、Queryオブジェクトを渡すことができますか、すべてのパラメータを分割する必要がありますか?

私の考えは私のページネーションリンクは次のようなURLに行くだろうということです。もちろん

@{Application.search(query, pageNo)} 

それはplay.api.mvc.Request[play.api.mvc.AnyContent]を期待するので、私はちょうど私のフォーム送信アクションにこれを提出することはできません。

答えて

3

独自のQueryBindersを作成すると、クエリオブジェクトを渡すことができます。 the ones in Playをチェックすると、その方法を確認できます。 Build.scalaファイルの変数routesImportにオブジェクト(暗黙的にQueryBindersのオブジェクト)を追加することを忘れないでください。

もう1つの方法は、GETリクエストといくつかのパラメータを使用してページ間を移動するComputersサンプル(Play Frameworkリリースのsamplesフォルダ)のページ付けに従うことです。

関連する問題