2014-01-20 1 views
6

Я создаю веб-приложение с фреймворком PLAY 2.2.1 и пытаюсь отобразить все доступные параметры запроса http get для запрашиваемого сайта в адресной строке, даже те, которые не являются установленный в запросе. В случаях, когда не все параметры http get заданы, я хочу добавить неустановленные параметры со значениями по умолчанию и сделать перенаправление.Play Framework: перенаправление на метод контроллера с аргументами

У меня есть сайт, который может быть запрошена с ГЭТ:

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

Проблема заключается в том, что редирект() принимает объект String, а не Result.

Мой первый решение написать

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"); 
}