Многократная операция удаления не работает - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь удалить данные, установив несколько флажков, но когда я выбираю флажки на экране и нажимаю кнопку удаления, удаляется только верхняя строка.Значит, независимо от того, какую строку я выберу, удаляется только первая запись таблицы.Пожалуйста, помогите мне.

Delete.servlet

delPage = request.getParameter("delPage");
    patientId = request.getParameter("pid");
    if(delPage.equals("true")) {

        int p = Integer.parseInt(patientId);  
        patientDao = new PatientDAO();
        boolean b = patientDao.isPatientDeleted(p);
        if (b) {
            System.out.println("Patient Deleted Successfully .... !");
            RequestDispatcher rd = request.getRequestDispatcher("/Pages/MasterPage.jsp");
            rd.forward(request, response);
        }else
            System.out.println("Patient deleting failed ... ! ");
    }

    RequestDispatcher rd = request.getRequestDispatcher("/Pages/MasterPage.jsp");
    rd.forward(request, response);
            }

Masterpage.jsp

<script type="text/javascript">
function addNewPatient(){
debugger;
var addNewPat = "true";
document.form.method = "POST";
document.form.action = "addPatient?newPage="+addNewPat;
document.form.submit();
}
function deletePatient(){
    debugger;
    var pid = document.getElementById("del").value;
    var delpatient = "true";
    document.form.method = "POST";
    document.form.action = "deletePatient?delPage="+ delpatient+"&pid="+pid;
    document.form.submit();
}
</script>      
    <c:forEach var="user" items="${patients}">
      <tr>
       <td>
        <input type="checkbox" id="del" value="<c:out value="${user.patientId}"> 
    </c:out>" >  
       </td>
    <td>
      <input type="hidden" id="delpatient"><c:out value="${user.patientId}"> 
       </c:out>
                <td><c:out value="${user.patientName}" /></td>
                 <td><c:out value="${user.patientAddress}" /></td>
                <td><c:out value="${user.patientPhone}" /></td>

            </tr>

        </c:forEach>

<div class="ui small button"  onClick="deletePatient(<c:out value="${user.patientId}"></c:out>)">
    <i class="trash ulternate icon"></i>
Delete
</div>

DeletePatientServlet.java

public class DeletePatientServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private PatientBean patient = null;
private PatientDAO patientDao = null;
String delPage = null ;
String patientId = null;

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    int patientId = Integer.parseInt(request.getParameter("pid"));
       PatientDAO patientDao = new PatientDAO();
     patientDao.isPatientDeleted(patientId);   
            System.out.println("Patient Deleted Successfully .... !");
            RequestDispatcher rd = request.getRequestDispatcher("/Pages/MasterPage.jsp");
            rd.forward(request, response);

}
}

1 Ответ

0 голосов
/ 26 мая 2018

Хорошо, в вашем коде есть куча ошибок.Я начну с jsp ...

Вы пытаетесь передать параметры через URL-адрес сервлета с POST запросом

document.form.method = "POST";
document.form.action = "deletePatient?delPage="+ delpatient+"&pid="+pid;

Вы не можете передавать данные в URL с помощью postЗапросы.Вам нужно изменить свой сервлет на GET, если вы хотите это сделать.

Также в этой строке:

<div class="ui small button"  onClick="deletePatient(<c:out value="${user.patientId}"></c:out>)">

вы передаете значение в свой метод deletePatient.Но ваш метод deletePatient не имеет возможности передать значение:

function deletePatient(){ // no value being passed here?
    debugger;
    var pid = document.getElementById("del").value;
    var delpatient = "true";
    document.form.method = "POST";
    document.form.action = "deletePatient?delPage="+ delpatient+"&pid="+pid;
    document.form.submit();
}

Вы также можете просто сделать:

${user.patientId}

вместо:

<c:out value="${user.patientId}"></c:out>

Другая проблема с вашим кодом заключается в том, что в вашем HTML не может быть нескольких элементов с одинаковым идентификатором.Это недопустимый HTML, и именно поэтому вы каждый раз получаете один и тот же идентификатор:

 <c:forEach var="user" items="${patients}">
      <tr>
       <td>
        <input type="checkbox" id="del" value="<c:out value="${user.patientId}">  //no this is bad.
    </c:out>" >  
       </td>
    <td>
      <input type="hidden" id="delpatient"><c:out value="${user.patientId}"> 
       </c:out>
                <td><c:out value="${user.patientName}" /></td>
                 <td><c:out value="${user.patientAddress}" /></td>
                <td><c:out value="${user.patientPhone}" /></td>

            </tr>

        </c:forEach>

Ваша кнопка удаления даже не находится внутри цикла, поэтому она не будет работать:

<div class="ui small button"  onClick="deletePatient(<c:out value="${user.patientId}"></c:out>)"> //this will pass the same id each time
    <i class="trash ulternate icon"></i>
Delete
</div>

Вместо этого попробуйте что-то вроде этого (только для удаления):

<script type="text/javascript">
function deletePatient(e){
    var patientid = e.getAttribute("data-patientid");
    deletePatientForm(patientid);
}
function deletePatientForm(pid) {
    var form = document.createElement("form");
    var input = document.createElement("input"); 

    form.method = "POST";
    form.action = "deletePatient";   

    input.value=pid;
    input.name="pid";
    form.appendChild(input);  

    document.body.appendChild(form);

    form.submit();
}
</script>  

<c:forEach var="user" items="${patients}">
   <tr>
    <th>id</th>
    <th>name</th>
    <th>address</th>
    <th>phone</th>
    <th></th>
   <tr>

   <tr>
    <td>${user.patientId}</td>
    <td>${user.patientName}</td>
    <td>${user.patientAddress}</td>
    <td>${user.patientPhone}</td>
    <td>
     <div class="ui small button" onClick="deletePatient(this)" data-patientid="${user.patientId}"><i class="trash ulternate icon"></i> Delete</div>
    </td>
   <tr>
</c:forEach>

Затем в сообщении вашего сервлета:

int patientId = Integer.parseInt(request.getParameter("pid"));

   PatientDAO patientDao = new PatientDAO();
   patientDao.isPatientDeleted(patientId);   

RequestDispatcher rd = request.getRequestDispatcher("/Pages/MasterPage.jsp");
rd.forward(request, response);

Если у вас возникли проблемы или вопросы, дайте мне знать,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...