【问题标题】:JSP Delete Row from MySQLJSP 从 MySQL 中删除行
【发布时间】:2016-11-06 05:39:29
【问题描述】:

我使用 MySQL 在我的 JSP 中生成了一个人员列表,问题是我应该如何删除他们。这是我的代码:

JSP:

                        <% ApplicantDAO applicantDAO = new ApplicantDAO();%>
                <% for (int i = 0; i < applicantDAO.viewApplicant().size(); i++) {%>

                <div class="column">
                    <div class="col-sm-3 col-xs-4">


                        <div class="list-group">


                            <a  class="list-group-item active">
                                <img src = "th_1x1.jpg" class = "img-responsive" alt = "Responsive Image" width = "100%" height ="100">
                                <h4 class="list-group-item-heading" id="guardName<%=+i%>" id="guardName<%=+i%>"><%=applicantDAO.viewApplicant().get(i).getApplicantFirstName() + " "%>
                                    <%=applicantDAO.viewApplicant().get(i).getApplicantLastName()%></h4>                 
                            </a>
                            <a  class="list-group-item">
                                <p class="list-group-item-text" id="applyingFor<%=+i%>" id="applyingFor<%=+i%>"><%=applicantDAO.viewApplicant().get(i).getApplyingFor()%></p>
                            </a>
                            <a class="list-group-item" data-toggle="modal" href="#moreDetails<%=+i%>">
                                <button  class="btn btn-primary btn-lg btn-block" id="moreDetails">More Details</button>                                   
                            </a>
                            <a  class="list-group-item">
                                <form action="deleteApplicant" action="post">
                                    <button type="button" class="btn btn-default delete" aria-label="Left Align" id="accept<%=applicantDAO.viewApplicant().get(i).getApplicantID()%>">
                                        <span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
                                    </button>
                                </form>
                                <form>
                                    <button type="button" class="btn btn-default delete" aria-label="Left Align" id="reject<%=applicantDAO.viewApplicant().get(i).getApplicantID()%>">
                                        <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                                    </button>
                                </form>
                            </a>
                            <div class="modal fade" id="moreDetails<%=+i%>">
                                <div class="modal-dialog">
                                    <div class="modal-content">
                                        <div class="modal-header">
                                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                                            <h3 class="modal-title">Applicant Information</h3>
                                        </div>
                                        <div class="modal-body">
                                            <h2 class="text-center"><%=applicantDAO.viewApplicant().get(i).getApplicantLastName() + ", "%><%=applicantDAO.viewApplicant().get(i).getApplicantFirstName()%></h2>
                                            <h4 class="text-center" id="id"><%=applicantDAO.viewApplicant().get(i).getApplicantID()%></h4>

以下代码使用我制作的 for 循环生成人员。但是,我的问题是获取要删除的内容的 ID。这是我的 servlet 代码:

    try (PrintWriter out = response.getWriter()) {
        /* TODO output your page here. You may use following sample code. */
        try {
            Applicant deletedApplicant = new Applicant();
            String value = request.getParameter("ID");
            int id = Integer.parseInt(value);
            ApplicantDAO applicantDAO = new ApplicantDAO();

            boolean successful = applicantDAO.rejectApplicant(deletedApplicant.getApplicantID());

             if (successful){
            ServletContext context= getServletContext();
            RequestDispatcher rd= context.getRequestDispatcher("/HiringPage.jsp");
            HttpSession session = request.getSession();
            session.setAttribute("deletedApplicant", deletedApplicant);
            rd.forward(request, response);
            System.out.println("successful");
        }else{
            ServletContext context= getServletContext();
            RequestDispatcher rd= context.getRequestDispatcher("/Dashboard.jsp");
            rd.forward(request, response);
        }
        } finally {
            out.close();
        }
    }

最后,这是我的控制器代码:

    public boolean rejectApplicant(int applicantID) {
    try {
        DBConnectionFactory myFactory = DBConnectionFactory.getInstance();
        Connection conn = myFactory.getConnection();

        String query = "delete from applicant where applicantID = ?";

        PreparedStatement pstmt = conn.prepareStatement(query);
        pstmt.setInt(1, applicantID);

        int rows = pstmt.executeUpdate();
        conn.close();
        pstmt.close();
        return true;
    } catch (SQLException ex) {
        Logger.getLogger(ApplicantDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
    return false;
}

你能指导我怎么做吗?太感谢了!

【问题讨论】:

  • 错误信息是什么?
  • 没什么。它根本没有显示任何错误
  • String query = "从申请者中删除,其中申请者ID = ?"; setInt 在哪里?
  • 请检查修改后的代码

标签: java mysql jsp servlets dao


【解决方案1】:

你的问题出在这部分代码

     <form action="deleteApplicant" action="post">
   <button type="button" class="btn btn-default delete" aria-label="Left Align" id="accept<%=applicantDAO.viewApplicant().get(i).getApplicantID()%>">
  <span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
  </button>
    </form>
    <form>
   <button type="button" class="btn btn-default delete" aria-label="Left Align" id="reject<%=applicantDAO.viewApplicant().get(i).getApplicantID()%>">
    <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
 </button>
 </form>

我不明白您为什么要放置 2 个表单,但是当您将 servlet 放在第一个表单中时,我建议您在放置 ID 的表单中添加隐藏输入

 <form action="deleteApplicant" action="post">
<input type="hidden" name="ID" value="<%=applicantDAO.viewApplicant().get(i).getApplicantID()%>"/>

       <button type="submit" class="btn btn-default delete" aria-label="Left Align" id="accept<%=applicantDAO.viewApplicant().get(i).getApplicantID()%>">
      <span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
      </button>
        </form>

您可以使用带有 servlet 的 servlet 获取此 ID 值

String value = request.getParameter("ID");

你应该知道你输入的第二种形式

<form>
   <button type="button" class="btn btn-default delete" aria-label="Left Align" id="reject<%=applicantDAO.viewApplicant().get(i).getApplicantID()%>">
    <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
 </button>
 </form>

不向servlet传递任何参数

所以改成

<form action="deleteApplicant" action="post">
    <input type="hidden" name="ID" value="<%=applicantDAO.viewApplicant().get(i).getApplicantID()%>"/>
       <button type="submit" class="btn btn-default delete" aria-label="Left Align" id="reject<%=applicantDAO.viewApplicant().get(i).getApplicantID()%>">
        <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
     </button>
     </form>

修改后:

你为什么通过

boolean successful = applicantDAO.rejectApplicant(deletedApplicant.getApplicantID());

简单通过

 boolean successful = applicantDAO.rejectApplicant(id);

【讨论】:

  • 我放了两个表格,因为第一个是接受,另一个是删除。以及如何进行隐藏输入?谢谢
  • 所以你应该把你的servlet放在第二种形式和隐藏的输入我把它添加到你的代码中
  • 是的,你把 delete servlet 放在了接受部分,这是你的第一个问题
  • 还是一样。在你说之前我已经改变了它,它确实没有显示错误消息
  • 您输入的第二个问题 type="button" 您应该将其更改为 type="submit" 。我的答案已编辑
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 2015-09-21
  • 2012-05-30
  • 2011-01-28
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多