почему не все таблицы прогружаются при обновлении веб-страницы?

0
08 апр 2020 16:02
Здравствуйте!

Есть контроллер с функцией, которая загружает данные на 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>


Данные точно передаются - проверял через отладчик, ну и об этом говорит то, что если поднять на верх какую-то из непрогружающихся таблиц, то она прогрузится.
Модераторы: Нет
Сейчас эту тему просматривают: Нет