多个删除操作无效

时间:2018-05-26 12:27:22

标签: java jsp servlets

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

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 :(得分:1)

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

您正尝试通过带有POST请求的servlet网址传递参数

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

您无法使用帖子请求传递网址中的数据。如果要执行此操作,则需要将servlet更改为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中不能有多个具有相同ID的元素。这是非法的HTML,这就是为什么每次都获得相同的ID的原因:

 <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>

然后在你的servlet的帖子中:

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);

如果您有任何问题或疑问,请告知我们。