Не все таблицы прогружаются при обновлении веб-страницы
Есть контроллер с функцией, которая загружает данные на web-страницу (UserController). Он Используется 2 раза: 1-ый раз - первоначальная загрузка - 1-ая таблица заполняется 2-я, 3-я и 4-я прогружаются пустыми (так должно быть, так и есть); 2-ой раз (после нажатия кнопки "Загрузить") - прогружается 1-ая и 2-ая по порядку следования таблицы, а последние 2-е не прогружаются, даже заголовки таблиц не выводятся, хотя при 1-ой загрузки выводились. Если на место 2-ой поставить 3-ю, то она прогружится, но 2-ая, которую мы переместили на 3-е место не загрузится. Данные точно передаются - проверял через отладчик, ну и об этом говорит то, что если поднять на верх какую-то из непрогружающихся таблиц, то она прогрузится.
@Controller
@RequestMapping("/water")
public class UserController {
@Qualifier("GeographKoordsService")
@Autowired
private GeographKoordsService geographKoordsService;
@Qualifier("PostService")
@Autowired
private PostService postService;
@Qualifier("FloodService")
@Autowired
private FloodService floodService;
@Qualifier("FloodDao")
@Autowired
private FloodDao floodDao;
@Autowired
private WeatherDarkSkyHttpURLConnection weatherDarkSkyService;
@Autowired
private WeatherOpenMapHttpURLConnection weatherOpenMapService;
@Autowired
private ReadExcel readExcel;
@Autowired
private AggregationData aggregationData;
List<Flood> listFlood=null;
@RequestMapping(value = "/administration", method = RequestMethod.GET)//Mapping web context, на который будет реагировать метод
public String administration(Model uiModel,@RequestParam(value = "latitude",required = false) String latitude, @RequestParam(value = "longitude",required = false) String longitude,
@RequestParam(value = "post",required = false) String post,
@RequestParam(value = "yearStart",defaultValue ="2019") String yearStart, @RequestParam(value = "monthStart",defaultValue ="4") String monthStart,
@RequestParam(value = "dayStart",defaultValue ="1") String dayStart, @RequestParam(value = "yearFinish",defaultValue ="2019") String yearFinish,
@RequestParam(value = "monthFinish",defaultValue ="4") String monthFinish, @RequestParam(value = "dayFinish",defaultValue ="3") String dayFinish,
@RequestParam(value = "hourStep",defaultValue ="24") String hourStep, @RequestParam(value = "aggregate",defaultValue="") String aggregate) {
List<PostView> listPostView=postService.getAllPostView();
uiModel.addAttribute("listPosts",listPostView);
List<WeatherDarkSky> listWeatherDarkSky= null;
List<Hydrology> hydrologyList=null;
if((latitude!=null) && (!latitude.equals(""))&&(longitude!=null) && (!longitude.equals(""))) {
try {
listWeatherDarkSky = weatherDarkSkyService.getWeather(Integer.valueOf(yearStart), Integer.valueOf(monthStart), Integer.valueOf(dayStart), 00,
Integer.valueOf(yearFinish), Integer.valueOf(monthFinish), Integer.valueOf(dayFinish), 24, latitude, longitude, Integer.valueOf(hourStep));
} catch (Exception e) {
e.printStackTrace();
}
uiModel.addAttribute("listWeatherDarkSky",listWeatherDarkSky);
}
if((post!=null) && (!post.equals(""))) {
hydrologyList = readExcel.readExcelHydrology("E:/Fast_Water_project/FastWaterWeb/Hydrometcentre.xls",post,
Integer.valueOf(yearStart),Integer.valueOf(monthStart),Integer.valueOf(dayStart),
Integer.valueOf(yearFinish),Integer.valueOf(monthFinish),Integer.valueOf(dayFinish));
uiModel.addAttribute("hydrologyList",hydrologyList);
}
if(listWeatherDarkSky!=null && hydrologyList!=null) {
listFlood = aggregationData.aggregation(hydrologyList, listWeatherDarkSky, post);
uiModel.addAttribute("listFlood", listFlood);
}
return "administration";
}
}
Скрипт страницы:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Страница администратора</title>
<style>
table {table-layout: fixed;width:98%; height: 200px; margin-top: 16px; border: black; }
.tr{background: cornflowerblue; color: white; text-align: center; vertical-align: center; horiz-align: center;}
td {word-wrap:break-word; text-align-all: center; border: black; align: center;}
.container {
height: 200px;
overflow: scroll;
}
</style>
<script>
</script>
</head>
<body>
<H2>Посты наблюдения</H2>
<div class="container">
<table class="tablePost">
<thead>
<tr class="tr">
<th>ID поста</th>
<th>Имя поста</th>
<th>Координаты</th>
<th>Высота над уровнем моря</th>
<th>Участок водоёма</th>
<th>Тип грунта</th>
<th>Населённый пункт</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<c:forEach items="${listPosts}" var="post">
<tr>
<td>${post.idPost}</td>
<td class="post">${post.namePost}</td>
<td class="geo">${post.geographkoords}</td>
<td>${post.hightSeaLevel}</td>
<td>${post.basinLocality}</td>
<td>${post.groundByGroundId}</td>
<td class="city">${post.localityByLocalityId}</td>
<td>${post.description}</td>
</tr>
</c:forEach>
</tbody>
</table>
<script>
document.querySelector('table.tablePost').addEventListener("click", e => {
var tr = e.target.closest("tbody > tr");
if (!tr) return;
var position = tr.querySelector("td.geo").textContent;//Берём нужную ячейку
position = position.split(/\s+/).map(Number); //Разбиваем содержимое ячейки
var post = tr.querySelector("td.post").textContent;//Берём нужную ячейку
document.nameForm.latitude.value=position[0];
document.nameForm.longitude.value = position[1];
document.nameForm.post.value = post;
});
</script>
</div>
<br>
<div>
<form name="nameForm" method="GET" action="/fast-water/water/administrationAdd">
Широта: <input type="text" name="latitude"/>
Долгота:<input type="text" name="longitude"/>
Пост: <input type="text" name="post"/>
Год с:<input type="text" name="yearStart"/>
Месяц с:<input type="text" name="monthStart"/>
День с:<input type="text" name="dayStart"/>
Год по:<input type="text" name="yearFinish"/>
Месяц по:<input type="text" name="monthFinish"/>
День по:<input type="text" name="dayFinish"/>
<button tybe="submit">Загрузить</button>
</form>
</div>
<br>
<br>
<H2>Данные c файла</H2>
<div class="container">
<table>
<thead>
<tr class="tr">
<th>ID Поста</th>
<th>Дата</th>
<th>Время</th>
<th>Уровень снега</th>
<th>Плотность снега</th>
<th>Промерзание почвы</th>
<th>Температура воды</th>
<th>Толщина льда на водоёме</th>
<th>Уровень воды</th>
</tr>
</thead>
<tbody>
<c:forEach items="${hydrologyList}" var="hydrology">
<tr>
<td>${hydrology.namePost}</td>
<td>${hydrology.localDate}</td>
<td>${hydrology.localTime}</td>
<td>${hydrology.levelSnow}</td>
<td>${hydrology.reserveWater}</td>
<td>${hydrology.levelFreezingGround}</td>
<td>${hydrology.temperatureWater}</td>
<td>${hydrology.heightIceOnWater}</td>
<td>${hydrology.lewelWater}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<br>
<H2>Данные с ресурса DarkSky</H2>
<div class="container">
<table>
<thead>
<tr class="tr">
<th>Координаты</th>
<th>Дата</th>
<th>Время</th>
<th>Долгота дня</th>
<th>Облачность</th>
<th>min t</th>
<th>max t</th>
<th>Ночная t</th>
<th>Дневная t</th>
<th>t</th>
<th>Влажность</th>
<th>Осадки</th>
<th>Снег</th>
<th>Дождь</th>
<th>Дождь/снег</th>
</tr>
</thead>
<tbody>
<c:forEach items="${listWeatherDarkSky}" var="weatherdarkSky">
<tr>
<td>${weatherdarkSky.koords}</td>
<td>${weatherdarkSky.localDateStr}</td>
<td>${weatherdarkSky.localTimeStr}</td>
<td>${weatherdarkSky.lonitudeDay_seconds}</td>
<td>${weatherdarkSky.cloudCover}</td>
<td>${weatherdarkSky.temperatureMin}</td>
<td>${weatherdarkSky.temperatureMax}</td>
<td>${weatherdarkSky.temperatureHigh}</td>
<td>${weatherdarkSky.temperatureLow}</td>
<td class>${weatherdarkSky.temperature}</td>
<td>${weatherdarkSky.humidity}</td>
<td>${weatherdarkSky.precipIntensity}</td>
<td>${weatherdarkSky.snow}</td>
<td>${weatherdarkSky.rain}</td>
<td>${weatherdarkSky.sleet}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<H2>Объединённые данные</H2>
<div class="container">
<table class="flood">
<thead>
<tr class="tr">
<th>Индификатор поста</th>
<th>Дата</th>
<th>Время</th>
<th>Долгота дня</th>
<th>Снег</th>
<th>Дождь</th>
<th>Снег с дождём</th>
<th>Влажность</th>
<th>Дневная t</th>
<th>Ночная t</th>
<th>Средняя t</th>
<th>Максимальная t</th>
<th>Минимальная t</th>
<%-- <th>Облачность</th>--%>
<th>Высота снежного покрова</th>
<th>Плотность снежного покрова</th>
<th>Промерзание почвы</th>
<th>t воды</th>
<th>Толщина льда</th>
<th>Уровень воды</th>
<th>Затопления</th>
</tr>
</thead>
<tbody>
<c:forEach items="${listFlood}" var="flood">
<tr>
<td>${flood.postByPostId.namePost}</td>
<td>${flood.date}</td>
<td>${flood.time}</td>
<td>${flood.longitudeDay}</td>
<td>${flood.snow}</td>
<td>${flood.rain}</td>
<td>${flood.snowRain}</td>
<td>${flood.relativeHumidity}</td>
<td>${flood.humidityDeficit}</td>
<td>${flood.temperatureDay}</td>
<td>${flood.temperatureNight}</td>
<td>${flood.temperatureMax}</td>
<td>${flood.temperatureMin}</td>
<%-- <td>${flood.solaractivity}</td>--%>
<td>${flood.levelSnow}</td>
<td>${flood.waterReserveInSnow}</td>
<td>${flood.levelFreezingGround}</td>
<td>${flood.temperatureWater}</td>
<td>${flood.heightIceOnWater}</td>
<td>${flood.levelWater}</td>
<td>${flood.warningFlood}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<br>
<div>
<form name="form" method="POST">
<input type="text" name="aggregate"/>
<button type="button" onclick="getAjax('/fast-water/water/download',printGet)">Загрузить</button>
</form>
</div>
</body>
</html>
Не пойму где ошибка?
Если я в контроллере комментирую часть кода, которая отвечает за заполнение данных для последней таблицы
if(listWeatherDarkSky!=null && hydrologyList!=null) {
listFlood = aggregationData.aggregation(hydrologyList, listWeatherDarkSky, post);
uiModel.addAttribute("listFlood", listFlood);
}
то все предыдущие таблицы выводятся нормально. Последняя выводится пустой, как и должно быть