2014-01-20 4 views
6

Ich bin eine Webanwendung mit PLAY-Framework 2.2.1 erstellen und versuche, alle verfügbaren http get Abfrageparameter für die angeforderte Website in der Adressleiste anzuzeigen, auch diejenigen, die nicht sind in der Anfrage festgelegt. Wenn nicht alle HTTP-Get-Parameter festgelegt sind, möchte ich die nicht festgelegten Parameter mit den Standardwerten hinzufügen und eine Umleitung vornehmen.Play Framework: Umleiten an Controller-Methode mit Argumenten

Ich habe eine Seite, die mit GET angefordert werden kann:

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

Hier ist die Methode, die ich in controllers.Application haben möchte:

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(...); 
    } 
} 

Das Problem ist, dass Redirect() nimmt ein String und kein Ergebnisobjekt.

Meine erste Lösung ist

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

zu schreiben, aber leider ist die Adressleiste nicht aktualisiert.

Meine zweite Lösung ist die Zeichenfolge manuell zu erstellen:

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

Dies funktioniert gut, aber es gibt keine andere Art und Weise eleganter Weg, dies zu tun?

Antwort

8

Verwenden Sie das routes Objekt:

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

Quelle: Official Documentation

1

zusätzlich gilt dies auch

public static Result index() { 
    return redirect("path"); 
}