2014-01-20 11 views
6

PLAYフレームワーク2.2.1でWebアプリケーションを構築していますが、要求されたサイトのすべての利用可能なhttp getクエリパラメータをアドレスバーに表示しようとしています要求に設定します。 すべてのhttp取得パラメータが設定されていない場合は、デフォルト値で未設定のパラメータを追加してリダイレクトします。Play Framework:引数を使用してコントローラメソッドにリダイレクトする

私がGETして要求することができるサイトがあります。ここでは

GET /test controllers.Application.test(q:String, w:String ?= null, f:String ?= null, o:String ?= null) 

は、私がcontrollers.Applicationにしたいのですが方法である:

public static Result test(String q, String w, String f, String o){ 

    ... 

    // In case not all parameters where set 
    if (reload == 1){ 
      return redirect(controllers.Application.test(qDefault, wDefault, fDefault, oDefault)); 
    } 
    else { 
     ok(...); 
    } 
} 

問題は(そのリダイレクトされます) ResultオブジェクトではなくStringをとります。

私の最初のソリューションは、

return controllers.Application.test(qDefault, wDefault, fDefault, oDefault); 

を書くことしかし残念ながらアドレスバーが更新されないです。

私の第二の溶液は、手動で文字列を構築することです:

return redirect("/test?q=" + query + "&f=" + f + "&w=" + w + "&o=" + showOptions); 

これはうまく動作しますが、これを行うには、他の方法よりエレガントな方法はありませんか?

答えて

8

routesオブジェクトを使用します。

public static Result index() { 
    return redirect(controllers.routes.Application.test(qDefault, wDefault, fDefault, oDefault)); 
} 

出典:加えて、これも有効であるOfficial Documentation

1

public static Result index() { 
    return redirect("path"); 
} 
関連する問題