Как обновить thymeleaf когда обновился список

Я теперь учу SpringMVC, соединил программу с firebase realtime database. Данные отправлять научился а от с приемом есть трудности.

  1. ValueEventListener работает асинхронно, поэтому сначала выполняется весь код и в контроллере срабатывает return "home", а потом доходять данные с базы данных, и в thymeleaf отправляется пустой список. Callback функцию я использовал - не помогло.
  2. Когда данные в realtime database обновляются срабатывает ValueEventListener. Можно как то обновленный список передать в thymeleaf не обновляя страницу? Я хочу сделать что-то на подобии чата, где в бд появляется новая запись, и в участниках чата должно появляться новое сообщение не обновляя страницу.

Как мне эти две вещи реализовать?

Код:

Controller:

@Controller
public class MainController {
@Autowired
MainService service;

@GetMapping("/")
public String gotohome(Model model){
    ArrayList<Msg> arrayList = service.one_more();
    model.addAttribute("str", arrayList);
        return "home";
}
}

MainService

@Service
public class MainService {

public ArrayList<Msg> one_more(){
    ArrayList<Msg> arrayList = new ArrayList<>();
    getText(new FBcallback() {
        @Override
        public void callback(ArrayList<Msg> list) {
            for (int i = 0; i < list.size(); i++){
                arrayList.add(list.get(i));
            }
        }
    });
    return arrayList;
}

public void getText(FBcallback callback){
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    ArrayList<Msg> arr = new ArrayList<>();
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            callback.callback(arr);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
}

home.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<div th:each="el : ${str}">
    <p th:text="${el.author}"></p>
</div>
</body>
</html>

Msg.java

public class Msg {
String author;
String msg;

public Msg(String author, String msg) {
    this.author = author;
    this.msg = msg;
}

public Msg() {
}

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}
public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}
}

Ответы (0 шт):