2016-10-15 8 views
6

Załóżmy, że mam następujący kod Java.Jak mogę renderować stronę FTL, powiedzmy z aktualizacjami?

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

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

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

To od Sparka. Gdy przechodzę do localhost: numer_portu /, widzę renderowany index.ftl, który załóżmy (nie jest tutaj zakodowany) wyświetla dane z bazy danych dla tej aplikacji. Ale załóżmy, że chcę dynamicznie aktualizować index.ftl. Powiedzmy, że inny użytkownik zaktualizował bazę danych (nie kodowaną tutaj) z innej instancji aplikacji i chciałem wyświetlić nowe zmiany w pliku index.ftl na stronie pierwszego użytkownika. Jak to się stało bez konieczności ponownego renderowania stron?

Nie można po prostu mieć timer po stronie Java, który ściąga nowe dane co 10-20 milisekund. Byłoby to również ogromne marnowanie czasu połączenia. Czy kod Java może być pingowany w jakiś sposób, że baza danych została zaktualizowana? Jak słuchacz dla bazy danych?

Nie tylko jest to problem, ale w jaki sposób można przekazać nowo otrzymane dane do pliku index.ftl bez konieczności ponownego wysyłania?

+0

Czy znaczy, że coś takiego [Server-Sent Events] (https : //developer.mozilla.org/en-US/docs/Web/API/Server-sent_events)? – UnholySheep

+0

Lub alternatywnie [Websockets] (https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) (zgodnie z [ten samouczek] (https://sparktutorials.github.io/2015/11 /08/spark-websocket-chat.html)) – UnholySheep

+0

@UnholySheep To jest dokładnie to, co mam na myśli, ale zamiast tego Java backend. W JavaScript AJAX jest drogą do zrobienia. Jak mam wysyłać żądania wysłane przez serwer w ramach Sparka? – user41912

Odpowiedz

1

Można przekazać dane do przeglądarek korzystających Comet

Istnieje kilka różnych technik COMET, które można użyć, aby osiągnąć efekt. Znalazłem bardzo comprehensive article jest przydatny do porównania i wyboru między nimi.


Po zastosowaniu Comet, można utilize this trick tak, że tylko odświeżyć zawartość w <div> tagu


Innym reference

Powiązane problemy