2017-06-20 43 views
-2

這是Play 2.5的菜鳥問題。Play Scala Post重定向獲取模式 - 重定向到視圖

我有一個簡單的操作,(最終)從表中刪除一個元素。 此操作由定義爲POST的路由觸發。

POST /delete/:id   @com.test.controllers.XController.delete(id: String) 

當刪除成功,則當前代碼解析爲一個名爲「成功」(在內部帶有一個自定義的消息參數和可供選擇的目的success.scala.html)圖。

Future.successful(Ok(success(Some("Item was deleted"), customObject))) 

但是,用戶仍然可以嘗試按F5刷新頁面,從而再次提交表單。爲了避免這種情況,一種選擇是重定向到「成功」視圖。

我不能爲了上帝的愛而弄清楚如何重定向到這個視圖。您似乎只能通過反向路由或使用網址進行重定向。

+2

你試過了嗎?'Future.successful(Redirect(newUrl))'? –

+0

對不起,延遲迴復。如前所述,這是我不想採取的一種選擇。 – Serendipity

回答

1

第一種方法,如果你需要播放形式(link on spec): 你可以通過直接參數:

val df = form().bindFromRequest() 
return redirect(routes.Application.somePlace(df.get("action"), 
df.get("id"))) 

如果您不需要Scala的形式,你可以通過redirectRedirect

GET /hello/:name   controllers.Application.hello(name) 
// Redirect to /hello/Bob 
def helloBob = Action { 
    Redirect(routes.Application.hello("Bob"))  
} 
+0

抱歉,延遲。我有一個稱爲「成功」的視圖,它帶有參數。它不會出現在「路線」上,因爲它不是路線。擁有一個URL意味着我需要弄清楚「成功」的URL是什麼。 – Serendipity

+0

如果你想在表單處理程序上進行重定向,請嘗試如下所示: 'userData => {Redirect(routes.Application.home(models.User.create(newUser)))}' –