При открытии URL
/users/{id}/foo
я буду отображать вид с вызовом
html.foo(userWithId)
В методе контроллера foo я хочу убедиться, что id такой же, какидентификатор пользователя, вошедшего в систему и, если нет, должен перенаправить пользователя на
/users/{theLoggedInUsersId}/foo
, используя
html.foo(loggedInUser)
, работает нормально, но это не перенаправление, поэтому URL в браузере по-прежнему равен
/users/{id}/foo
Я хочу действительно перенаправить, чтобы URL отображал правильный идентификатор.Я не уверен, как это сделать.Используя «Действие» следующим образом:
Action(foo(loggedInUsersId))
получит ошибку при использовании рекурсии без указания типа возврата.Добавление возвращаемого типа play.template.Html к методу контроллера foo приведет к ошибке компилятора, поскольку Action возвращает ScalaAction, а не Html.
Как это сделать.Должен ли я даже сделать это, я застрял, думая об этом неправильно?
Edit
Перенаправление (...) работает нормально.Но можно ли обойтись без этого?В псевдо-Scala:
def list(id: Long) = {
if (some_criteria)
html.list(user_with_id_equal_to_id)
else if(another_criteria)
list(another_user_id)
else
Action(Application.login)
}
Список (another_user_id) не будет работать, так как это рекурсивный вызов, и я должен указать тип возврата в методе list.Добавление типа возврата play.templates.Html не будет работать, так как это не тип возврата Действие
Вы видите, к чему я клоню?Если я вместо вызова list использую html.list (user_with_another_id), то это не будет перенаправление, и URL-адрес в браузере будет по-прежнему / users / id / foo вместо / user /another_id / Foo.