У меня настроен Eventbus, который будет обновлять карту с событиями монитора.Таким образом, карта всегда будет иметь самые последние события монитора для каждого имени.Как пользователь, вы видите самые последние события, которые вы переходите по URL-адресу "/ Overview", который отображает основную страницу HTML.
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
@Controller
public class OverviewController {
private final Map<String, MonitorResponse> monitorEvents;
@Autowired
public OverviewController(EventBus eventBus) {
monitorEvents = new HashMap<>();
eventBus.register(this);
}
@RequestMapping("/overview")
public String overview(Model model) {
model.addAttribute("monitorResponseMap", monitorEvents);
return "overview";
}
@Subscribe
public void subscribe(MonitorEvent monitorEvent) {
monitorEvents.put(monitorEvent.getName(), monitorEvent.getMonitorResponse());
}
}
HTML:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Serving Web Content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="stylesheet" href="/bootstrap-4.0.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="/css/styles.css"/>
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-sm-"
th:each="monitorevent : ${monitorResponseMap}"
style="margin: 10px;padding:20px;border-radius: 10px;"
th:classappend="${monitorevent.value.getMonitorStatus().name()}">
<div class="card-title" style="font-weight: bolder" th:text="${monitorevent.key}"></div>
<p th:text="${monitorevent.value.getMessage()}"></p>
</div>
</div>
</div>
<script src="/jquery-3.3.1.min.js"></script>
<script src="/bootstrap-4.0.0/js/bootstrap.min.js"></script>
</body>
</html>
Что такоеСамый простой способ динамического обновления пользовательского интерфейса, когда появляются новые события, например, когда вызывается метод подписки?Сейчас я делаю автоматическое обновление страницы Javascript (используя мета-тег (http-equ = refresh), но это раздражает пользователя. Использование websockets? Ajax?