2011-09-06 9 views
0

これが意図したとおりに機能していないかどうかわかりませんが、私は混乱しています。アクションチェインがリダイレクトされないController.await(int millis)

私がしたいのは、非同期にアクションを遅らせることです。await(int millis)と私は友達になれるようです。

はここで何が起こるかです:Application.somethingにPOSTを送信フォームを表示Application.index

1.

アプリ/コントローラ/ Application.java

public static void index() { 
    render(); 
} 

アプリ/ビュー/アプリケーション/ index.htmlを

#{form @Application.something()} 
    <input type="submit"> 
#{/form} 

2.Application.somethingはその事を行い、次にindexにチェーンされます。

アプリ/コントローラ/ Application.java

public static void something() { 
    await(500); 

    // Here be business 

    index(); 
} 

3. Playがアプリケーションエラーを発生させます:を "テンプレートアプリケーション/ something.htmlは存在しません"。

のでApplication.somethingでの実行が中断された後render()Application.indexに呼び出されたときに/それはもちろん存在しないApplication.somethingのテンプレートを、レンダリングしようと再開しました。

await(500)を削除すると、すべて正常に機能します(302が発行され、indexが正常にレンダリングされます)。

私は

redirect("/"); 

でリダイレクトを強制し、私はしたいが、これは醜い感じている結果を得ることができます。

私はまた、右await後に手動で

request.action = "Application.index"; 

を設定し、意図したとおりにApplication.index作品(Controller.template()作品で、実際、魔法)でレンダリングすることができます。


だから基本的に、すべてOKだと私はawaitではなく、メソッド呼び出しの後に文字列を使用して一緒に暮らすことを余儀なくしています、または何かが少しオフになっていますか?

乾杯、 Tobias。

答えて

0

await()メソッドを呼び出すと、PlayはこのHTTP要求を中断します。タイムアウト後、再び呼び出されたかのように新しいHTTPRequestとして再び開始されます。

最初のケースでは、await()メソッドを使用しないと、re-directionが正しく発生します。これは、このメソッド呼び出しがPlayフレームワークによって正しく代行受信され、直接。

しかし、2番目のケースでは、await()メソッドの後に新しいHTTPRequestが作成され、アクションチェインが発生していません。つまり、フレームワークがindex()メソッドの呼び出しを傍受していない。これは他の方法と同様に実行されるため、リダイレクトは表示されません。

+0

回答をお寄せいただきありがとうございます。あなたの説明が継続を使用していない1.2より前の状態を待っているように聞こえますが。私は1.2の後に、要求全体を再実行しないことが待たれていたと思った。 :o – Tobias

関連する問題