2016-10-15 1 views
6

私は次のJavaコードを持っているとします。どのようにFTLページを連続してレンダリングすればよいですか?

get("/", (request, response) -> { 
    Map<String, Object> attributes = new HashMap<>(); 

    //attributes.put("message", "Hello World!"); 

    return new ModelAndView(attributes, "index.ftl"); 
}, new FreeMarkerEngine()); 

これはSparkのものです。 localhost:portnumber /に移動すると、index.ftlレンダリングが表示されます。このアプリケーションでは、このアプリケーションのデータベースのデータが表示されます(ここではコード化されていないものとします)。しかし、私がindex.ftlを動的に更新したいとしましょう。別のユーザーがアプリケーションの別のインスタンスからデータベース(ここではコード化されていない)を更新し、最初のユーザーのページにindex.ftlの新しい変更を表示したかったとします。ページを再レンダリングしなくても、これはどのように行われますか?

新しいデータを10-20ミリ秒ごとにプルするJava側にタイマーを設定するだけでは不十分です。それは接続時間の大規模な浪費でもあります。データベースが更新されたことを何らかの方法でpingすることができますか?データベースのリスナーと同じですか?

問題だけでなく、再レンダリングせずに、新しく受信したデータをindex.ftlにどのようにプッシュできますか?

+0

以内に内容を更新するように[サーバー-送信されたイベント]のようなものを意味するか(HTTPS ://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events)? – UnholySheep

+0

または[Websockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)([こちらのチュートリアル](https://sparktutorials.github.io/2015/11) /08/spark-websocket-chat.html)) – UnholySheep

+0

@UnholySheepそれはまさに私が言っていることですが、代わりにJavaバックエンドのためです。 Javascriptでは、AJAXが道のりです。 Sparkフレームワークでサーバから送信されたリクエストをどのようにして作成しますか? – user41912

答えて

1

あなたが効果を達成するために使用できるいくつかの異なるCOMETの技術があるCOMET

を使用して、ブラウザにデータをプッシュすることができます。私は非常に見つけたcomprehensive articleは、それらを比較し、選択するのに便利です。 COMETを採用した後


、あなたは可能性がありutilize this trickあなただけ<div>タグ


reference

関連する問題