Есть контроллер с функцией, которая загружает данные на web-страницу (UserController). Он Используется 2 раза:
1-ый раз - первоначальная загрузка - 1-ая таблица заполняется 2-я, 3-я и 4-я прогружаются пустыми (так должно быть);
2-ой раз (после нажатия кнопки "Загрузить") - прогружается 1-ая и 2-ая по порядку следования таблицы, а последние 2-е не прогружаются. Если на место 2-ой поставить 3-ю, то она прогружится, но 2-ая, которую мы переместили на 3-е место не загрузится.
Не пойму в чем дело, почему грузятся именно первые 2-е по порядку, в независимости что это за таблицы, а последнии 2-е не грузятся?
@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> function createXMLHttp() { var Request = false; if (window.XMLHttpRequest) { //Gecko-совместимые браузеры, Safari, Konqueror Request = new XMLHttpRequest(); } else if (window.ActiveXObject) { //Internet explorer try { Request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (CatchException) { Request = new ActiveXObject("Msxml2.XMLHTTP"); } } if (!Request) { alert("Невозможно создать XMLHttpRequest"); } return Request; } function getAjax(url, callback) { // функция Ajax GET // создаем Объект var oXmlHttp = createXMLHttp(); var body='aggregate='+encodeURIComponent('value'); // подготовка, объявление заголовков oXmlHttp.open("POST", url, true); oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); // описание функции, которая будет вызвана, когда придет ответ от сервера oXmlHttp.onreadystatechange = function() { if (oXmlHttp.readyState == 4) { if (oXmlHttp.status == 200) { callback(oXmlHttp.responseText); } else { callback(oXmlHttp.statusText); } } } oXmlHttp.send(body); } function printGet(text) { alert(text); } </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>
Данные точно передаются - проверял через отладчик, ну и об этом говорит то, что если поднять на верх какую-то из непрогружающихся таблиц, то она прогрузится.