2017-07-17 4 views
5

ノートをリダイレクト/ビューをレンダリング:私は私のプレイのためのフレームワークにプレイフレームワーク - 処理をしている間X秒後に

を再生する新しいです!私はいくつかの形式の非同期プログラミングが必要です。つまり、バックグラウンドで処理している間にビューを表示し、その後にリダイレクトや新しいフォームを表示する必要があります。

このquestionは返信なしで尋ねられました。私はPlayのドキュメントページを見てきましたが、そこには解決策が見つかりませんでした。

を私はplay starter exampleで与えられているAsynchControllerを変更しようとしました:私は試してみました何

。しかしながら、にナビゲートするとき、機能は、設定された「忘れられた」スケジュールされたタスクの代わりに、より多くの睡眠として行動するように見えた。すなわち、さらなるコーディングを続けることができる。

AsynchControllerスニペット:独自の修正

public CompletionStage<Result> message() { 
     return getFutureMessage(5, TimeUnit.SECONDS).thenApplyAsync(s -> ok(views.html.User.Account.verified.render()), exec); 
    } 

    private CompletionStage<String> getFutureMessage(long time, TimeUnit timeUnit) { 
     CompletableFuture<String> future = new CompletableFuture<>(); 
     actorSystem.scheduler().scheduleOnce(
      Duration.create(time, timeUnit), 
      () -> future.complete("Waiting 5 seconds..."), 
      exec 
     ); 
     return future; 
    } 

経路エントリを持つ

GET  /message     controllers.AsyncController.message 

目的:

がここを目指し、続いて表示されるメッセージWaiting 5 seconds...のためだったマイ+/- 5秒の遅延。その後、それはビューをレンダリングする(またはコントローラにリダイレクトする)、この場合はverifiedページ(アカウントの確認用)の "future"(これは正しい?)に達するでしょう。

私は私の本来の目標を正しい軌道に乗っていますが、どこで似たような良い例が得られますか?

+0

あなたがサーバーの応答を処理するために、任意のクライアントのロジックを使用していますか? – tgk

+0

クライアント側で特定のレンダリングロジックを使用してチャンクレスの応答を使用しない限り、このように複数の応答を返す解決策はないと確信しています。 – cchantep

+0

@cchantep Play Frameworkに関して「クライアント側」という意味を定義してください。どのようなクライアント側と何が "サーバー側"(私は、サーバー側の機能がコントローラのルーティングコントローラのコードを実行していると仮定します) – KGCybeX

答えて

1

私は単純な解決策がありますが、ルートに2つのエントリを設定する必要があります。

最初のエントリでは、「Waiting 5 seconds ...」というメッセージが表示され、同時に2番目のエントリにAJAXコールが送信されます。 2番目のエントリのコントローラは、5秒間の計算/スリープを行い、必要なコンテンツを返します。これはJavascriptによって最初のページにレンダリングされます。あなたのようなものを置く最初のウェブページで

axios.get(second-url) 
     .then(function (response) { 
     document.getElementById(someplaceholder).innerHTML=response.data. 
     }) 
+0

これは、例えばgithubのプロファイル編集ページにあるように、さまざまなサブメニューが存在し、クリックされたときにサブメニューのオプションに置き換えられた「プレースホルダー」のプロファイルを編集しますか? – KGCybeX

+0

あなたは各サブメニューにAJAXコールを与えます。しかし、Githubの場合、URLバーを見ると、すべてのサブメニューが異なるURLを指しているように見えるので、AJAXではなく、通常のHTTPリクエストです。 – haijin

関連する問題