Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Как вывести ошибку на стороне клиента в случае неуспешной операции удаления?

#java #mysql #java_ee


Стоит задача по разработке админ панели для интернет-магазина запчастей. Есть таблица
товаров и заказов в MySQL, администратор может удалить товар только в том случае, если
id товара не используется в базе заказов.

Это все понятно. Удаление сделал, теперь хочу красиво вывести ошибку, если товар
есть в заказе, а я его случайно хотел удалить. В сервисном слое try/catch отлавливаю
и вывожу надпись ошибки. 
Но хотелось бы реализовать редирект на страничку товаров и вывести ошибку в клиенте. 

Не совсем понимаю как это действие реализовать. 
Подскажите пожалуйста. Буду благодарен очень.

Код контроллера по удалению:

public class DeleteOrdController implements Controller {
    private OrdService ordService = OrdServiceIpl.getInstance();
    private Logger logger = Logger.getLogger(DeleteOrdController.class);

    @Override
    public void execute(HttpServletRequest req, HttpServletResponse resp) {
        try{
            String id = req.getParameter("deleteOrd");
            long ordId = Long.parseLong(id);
            ordService.delete(ordId);
            String contextPath = req.getContextPath();
            resp.sendRedirect(contextPath + "/frontController?command=orders");
        } catch (IOException e) {
            logger.error(e);
        }

    }
}


Таблица товаров:

 
            
Parts id Producer Category Name parts Chatacteristics Price Delete
${status.index + 1} ${batteries.id} ${batteries.producer} ${batteries.category} ${batteries.name} ${batteries.chatacteristics} ${batteries.price}

Сервисный слой: @Override public int delete(Serializable id) { try { return partsDao.delete(id); } catch (SQLException e) { throw new ServiceException("Ошибка удаления Parts по id " + id); } } ДАО @Override public int delete(Serializable id) throws SQLException { psDelete.setLong(1, (long) id); return psDelete.executeUpdate(); }


Ответы

Ответ 1



т.е. перед удалением товара (parts) нужно проверить его наличие в таблице (orders) и если он там имеется, то вывести предупреждение... Другой вариант, в таблице товаров завести колонку в скольких заказах товар участвует... и например (тут уж от вашей бизнес-логики зависит) каждый новый заказ увеличивает это число на 1, каждый выполненный заказ уменьшает. Если значение больше 0, то удалить товар нельзя. т.е. и в ДАО и в Сервисе нужны еще специальные методы отвечающие за проверку Соответсвенно, контроллер получив информацию, о том, что такой товар имеется в заказах, отправляет указание странице вывода, а там под специальным тегом сообщение об ошибке

Комментариев нет:

Отправить комментарий