回答

6

發生這種情況的原因在於,一旦您創建了自己的東西,您就會通過調用show操作告訴您遊玩Show

爲了達到這個目的,play正在執行重定向(保持其RESTful狀態),告訴瀏覽器由於調用create()動作,它現在必須重定向到show()動作。

所以,你有幾個選項。

  1. 不要呈現響應,並讓客戶端在創建它之後處理它(不理想)。
  2. 而不是調用顯示(),只需自己使其在create()方法...

要使用選項2,它可能看起來像下面這樣:

public static void create() { 
    Something something = new Something(); 
    something.save(); 
    response.status = StatusCode.CREATED; 
    renderTemplate("Application/show.html", something); 
} 
+1

'201 Created'應當連同'Location'頭,其不會與解決方案2.發生?你能詳細說明溶液1發,我不明白它? – deamon

+0

解決方案1不好。它基本上是說,在你的請求創建後,然後請求show(),所以你的流程決定了客戶端(即javascript),而不是你的行爲中的服務器端。 – Codemwnci

+3

我已經檢查了Play(1.2.3)和Redirect對象的源代碼,有一個代碼,默認爲302.它有一個構造函數來提供不同的代碼,但是這個構造函數似乎沒有用在框架。 – Codemwnci

1

示例代碼用於設置Play框架中的狀態碼: Response.current()。status = Http.StatusCode.CREATED;

0

在播放框架中,調用另一個動作會執行重定向,但被調用的動作不是公共的。 所以,這裏是解決方案之一:

public class SomeController extends Controller { 

    public static void create() { 
     Something something = new Something(); 
     something.save(); 
     response.status = StatusCode.CREATED; // Doesn't work! 
     show(something.id); 
    } 

    private static void show(long id) { 
     render(Something.findById(id)); 
    } 
}