Java 多重删除操作不起作用

Java 多重删除操作不起作用,java,jsp,servlets,Java,Jsp,Servlets,我试图通过选中多个复选框来删除数据,但是当我从屏幕上选择复选框并点击删除按钮时,只有最上面的一行被删除。意味着无论我选择哪一行,它都会删除表中唯一的第一个条目。请帮帮我 Delete.servlet delPage = request.getParameter("delPage"); patientId = request.getParameter("pid"); if(delPage.equals("true")) { int p = Integer.pars

我试图通过选中多个复选框来删除数据,但是当我从屏幕上选择复选框并点击删除按钮时,只有最上面的一行被删除。意味着无论我选择哪一行,它都会删除表中唯一的第一个条目。请帮帮我

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>

好吧,你的代码中有很多错误。我将从jsp开始

您正试图通过带有
POST
请求的servlet url传递参数

document.form.method = "POST";
document.form.action = "deletePatient?delPage="+ delpatient+"&pid="+pid;
您不能通过post请求传递url中的数据。如果要这样做,您需要将servlet更改为
GET

此外,在这方面:

<div class="ui small button"  onClick="deletePatient(<c:out value="${user.patientId}"></c:out>)">
你也可以这样做:

${user.patientId}
而不是:

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

如果你有任何问题,请告诉我

${user}
在c:forEach循环结束后保留在页面范围内,因此当您单击按钮时,最后一个患者将被删除。给每一行一个按钮,您的问题就解决了。给出此错误的ur代码<代码>HTTP状态500-对于输入字符串:“[object HtmlDevice]”为输入字符串键入异常报告消息:“[object HtmlDevice]”说明服务器遇到一个内部错误,使其无法满足此请求。异常java.lang.NumberFormatException:对于输入字符串:[object HtmlDevice],我还想使用复选框删除记录。您的代码为每个单独的记录创建一个按钮。该错误确切地涉及代码的哪个区域?是的,我去掉了你的复选框,但是你可以很容易地将按钮替换为有监听器在更改时提交的复选框。我已经更新了我的代码。它在第
intpatientid=Integer.parseInt(request.getParameter(“pid”))行显示错误
在DeletePatientServlet.java文件中,由于未发送参数pid,您将获得一个空指针。并且不能在null上解析int。检查您的代码是否与我编写的代码完全匹配。确保${user.patientId}实际正在输出某些内容。检查表单头以查看是否正在发送该值
${user.patientId}
<c:out value="${user.patientId}"></c:out>
 <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);