Неверно выводит таблицы с данными

199
11 мая 2019, 15:10

Столкнулся с проблемой, есть база данных с заказами пользователей. Есть метод, который согласно User id вытягивает заказы именно этого юзера. В юнитестах слой ДАО, Сервиса протестирован и все работает.

НО на стороне клиента при обновлении данные изменяются. Т.е, предположим юзер добавил 4 разных товара, потом 1 удалил. Обновляется страница и удаление не произошло, повторно обновляет бац и 3 товара, еще раз и опять 4.

На стороне сервера в базе все отображается корректно. Но на ЮИ проблема. При запуске Дебаггера все работает корректно. В чем проблема, понять не могу. Буду очень признателен за помощь, т.к. время подпирает конкретно....

Собственно код ЮИ:

<table>
    <tr>
        <th>№</th>
        <th><ftm:message bundle="${i18n}" key="ord.id"/></th>
        <th>Parts id</th>
        <th>Quantity</th>
        <th>Total sum</th>
        <th><ftm:message bundle="${i18n}" key="ord.delete"/></th>
    </tr>
    <c:forEach var="ord" items="${orders}" varStatus="status">
    <tr>
        <td>${status.index + 1}</td>
        <td>${ord.id}</td>
        <td>${ord.parts_id}</td>
        <td>${ord.quantity}</td>
        <td>${ord.total}</td>
        <td><form action="frontController?command=deleteord" method="post">
            <button value="${ord.id}" name="deleteOrd" class="btn">Delete</button>
        </form></td>
    </tr>
    </c:forEach>
</table>

Контроллер вывода:

public class OrderController implements Controller {
    private OrdService ordService = OrdServiceIpl.getInstance();
    @Override
    public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        User user = (User)req.getSession().getAttribute("user");
        List<Ord> orders = ordService.getByUserId(user.getId());
        req.setAttribute("orders", orders);
        RequestDispatcher dispatcher = req.getRequestDispatcher(MAIN_PAGE);
        dispatcher.forward(req, resp);
    }
}

Контроллер удаления:

public class DeleteOrdController implements Controller {
    private OrdService ordService = OrdServiceIpl.getInstance();
    @Override
    public void execute(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        String id = req.getParameter("deleteOrd");
        long ord_id = Long.parseLong(id);
        ordService.delete(ord_id);
        String contextPath = req.getContextPath();
        resp.sendRedirect(contextPath + "/frontController?command=orders");
    }
}

Сервисный слой:

 @Override
    public int delete(Serializable id) {
        try {
            return ordDao.delete(id);
        } catch (SQLException e) {
            throw new SecurityException("Ошибка удаления Ord по id " + id);
        }
    }

Сервисный:

    @Override
public List<Ord> getByUserId(long userId) {
    try {
        return ordDao.getByUserId(userId);
    } catch (SQLException e) {
        rollback();
        throw new SecurityException("Ошибка получения заказов по userId" + userId);
    }
}

ДАО:

    public List<Ord> getByUserId(long user_id) throws SQLException {
        psGetByUserId = preparedStatement(getByUserId);
        psGetByUserId.setLong(1, user_id);
        psGetByUserId.execute();
        ResultSet rs = psGetByUserId.getResultSet();
        List<Ord> list = new ArrayList<>();
        while (rs.next()) {
            list.add(populateOrd(rs));
        }
        close(rs);
        return list;
    }
public int delete(Serializable id) throws SQLException {
            psDelete = preparedStatement(deleteOrdQuery);
            psDelete.setLong(1, (long) id);
            return psDelete.executeUpdate();
    }

Подозрений нет... ПОМОГИТЕ

Answer 1

Вопрос решен. В DAO слое создавалось несколько объекте соединения создавалось несколько preparedStatement. И из-за этого были такие пляски. Решение - статический блок:

{
    try {
        psSave = ConnectionManager.getConnection().prepareStatement(savePartsQuery, Statement.RETURN_GENERATED_KEYS);
        psUpdate = ConnectionManager.getConnection().prepareStatement(updatePartsQuery);
        psGet = ConnectionManager.getConnection().prepareStatement(getPartsQuery);
        psGetAll = ConnectionManager.getConnection().prepareStatement(getAllPartQuery);
        psDelete = ConnectionManager.getConnection().prepareStatement(deletePartsQuery);
        psGetByCategory = ConnectionManager.getConnection().prepareStatement(getByCategory);
    } catch (SQLException e) {
        logger.error(e);
    } finally {
    }
}
READ ALSO
Парсер не переходит на другую страницу

Парсер не переходит на другую страницу

Пишу парсер, учусь, вот код:

203
Как передать @ConfigurationProperties в сервис?

Как передать @ConfigurationProperties в сервис?

Имеется класс конфига:

164
Почему не вызывается повторно метод onGetViewFactory?

Почему не вызывается повторно метод onGetViewFactory?

При запуске виджета метод onGetViewFactory запускается и создается объект ViewsFactory и вызываеться метод onCreate

224
Как распарсить Json, пришедший от response

Как распарсить Json, пришедший от response

Делаю String jsonStr = responsejson(), чтобы получить данные с ApiVk В итоге я получаю

195