Проблема шаблона CRUD JDB C с операцией удаления - PullRequest
0 голосов
/ 28 января 2020

У меня проблема с операцией удаления CRUD. Когда я нажимаю Удалить, который написан таким образом в jsp file <form action="delete?Id=${medicines.id}" method="post"> <input type="submit" value="Delete"> </form>.

Вот мой DeleteController (если я набираю что-то в doGet, я получаю результаты, а не пустую страницу)

@WebServlet("/delete")
public class MedicinesDeleteController extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        int id = Integer.parseInt(request.getParameter("Id"));
        if(request.getUserPrincipal() != null) {
            MedicinesService query = new MedicinesService();
            query.delete(id);
            response.sendRedirect(request.getContextPath() + "/");
        } else {
            response.sendError(403);
        }
    }   
}

Удалить функцию из MedicinesService ( Я думаю, что это моя проблема )

public void delete(int id) {
    DAOFactory factory = DAOFactory.getDAOFactory();
    MedicinesDAO medicinesDao = factory.getMedicinesDAO();
    Medicines medicines = new Medicines();
    medicines.setId(id);
    medicinesDao.delete(medicines);
}

И MedicinesDAOImpl

private final static String DELETE_MEDICINES = 
      "DELETE FROM medicines WHERE id_medicines=:id_medicines;";
@Override
public void delete(Medicines medicines) {
    SqlParameterSource namedParameter = new MapSqlParameterSource("Id", medicines.getId());
    template.update(DELETE_MEDICINES, namedParameter);
}

Новые ошибки

medicinesDao.delete(medicines); < MedicicinesService:41
template.update(DELETE_MEDICINES, namedParameter); < MedicinesDAOImpl:77
query.delete(id); <MedicinesDeleteController:31


       Type Exception Report

        Message No value supplied for the SQL parameter 'id_medicines': No value registered for key 'id_medicines'

        Description The server encountered an unexpected condition that prevented it from fulfilling the request.

        Exception

        org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'id_medicines': No value registered for key 'id_medicines'
            org.springframework.jdbc.core.namedparam.NamedParameterUtils.buildValueArray(NamedParameterUtils.java:355)
            org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.getPreparedStatementCreator(NamedParameterJdbcTemplate.java:398)
            org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.getPreparedStatementCreator(NamedParameterJdbcTemplate.java:370)
            org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:317)
            pl.firstaidkit.dao.MedicinesDAOImpl.delete(MedicinesDAOImpl.java:77)
            pl.firstaidkit.dao.MedicinesDAOImpl.delete(MedicinesDAOImpl.java:1)
            pl.firstaidkit.service.MedicinesService.delete(MedicinesService.java:41)
            pl.firstaidkit.controller.MedicinesDeleteController.doPost(MedicinesDeleteController.java:31)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
            org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
            pl.firstaidkit.filter.LoginFilter.doFilter(LoginFilter.java:26)
        Note The full stack trace of the root cause is available in the server logs.

1 Ответ

0 голосов
/ 28 января 2020

Первоначальная проблема заключалась в том, что это приводило к вызову метода http get, а у метода doGet () не было кода для обработки того же самого

 <a href="delete?drugid=${medicines.id}">Delete</a> 

Вторая проблема была связана с несовпадением имени и места в параметре MapSqlParameterSource держатель в запросе.

...