Вывод сообщений в TextArea каждый раз когда вызывается метод
Есть html форма:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head></head>
<body>
<form th:method="post" action="/" th:object="${dates}">
<textarea class="logs" name="logs" id="logs"></textarea>
</form>
<script>
const logsTextArea = document.querySelector('#logs');
let lastUpdatedMessage = '';
function getLogsAndUpdateTextArea() {
fetch('/logs')
.then(response => response.text())
.then(data => {
if (data !== lastUpdatedMessage) {
logsTextArea.value += data;
logsTextArea.scrollTop = logsTextArea.scrollHeight;
lastUpdatedMessage = data;
}
});
}
setInterval(getLogsAndUpdateTextArea, 1);
</script>
</body>
</html>
На форме textarea, куда выводятся сообщения из класса CreateFile.getMessage();
Есть REST-контроллер, который выводит сообщения в textarea
@RestController
@RequestMapping("/logs")
public class LogsController implements MessageUpdateListener {
private final CreateFile createFile;
private String lastMessageUpdate = "";
private String currentMessageUpdate = "";
@Autowired
public LogsController(CreateFile createFile) {
this.createFile= createFile;
this.createFile.addMessageUpdateListener(this);
}
@GetMapping
public ResponseEntity<String> getLogs() {
String message = createFile.getMessage();
if (!message.equals(lastMessageUpdate)) {
currentMessageUpdate = message;
lastMessageUpdate = message;
}
return ResponseEntity.ok(currentMessageUpdate + "\n");
}
@Override
public void onMessageUpdate(String message) {
currentMessageUpdate = message;
}
}
Интерфейс:
public interface MessageUpdateListener {
void onMessageUpdate(String message);
}
Класс CreateFile:
@Service
public class CreateFile {
private String message = "";
private final List<MessageUpdateListener> messageUpdateListeners = new ArrayList<>();
@Autowired
public CreateFile() {}
public void addMessageUpdateListener(MessageUpdateListener listener) {
messageUpdateListeners.add(listener);
listener.onMessageUpdate(message);
}
public void removeMessageUpdateListener(MessageUpdateListener listener) {
messageUpdateListeners.remove(listener);
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
if (!this.message.equals(message)) {
this.message = message;
notifyMessageUpdateListener(message);
}
}
private void notifyMessageUpdateListener(String message) {
for (MessageUpdateListener listener : messageUpdateListeners) {
listener.onMessageUpdate(message);
}
}
public List<Usl> readDBF(String[] check_otd) {
***
setMessage("Чтение данных ");
***
}
public List<Usl> selectCorrectUsl(String[] checks) {
List<Usl> list = readDBF(checks);
setMessage("Проверка корректности услуг. Начало");
return list;
}
}
Метод setMessage вызывается во многих местах класс, но для простоты оставила в двух местах. Все работает в принципе, только есть один момент. Если текст сообщения не изменяется, то в textarea не выводится информация. Как сделать чтобы при каждом вызове setMessage в textarea сразу же выводилась информация?