【问题标题】:Continue with the attribute to the next requested page继续使用该属性到下一个请求的页面
【发布时间】:2018-12-21 01:19:55
【问题描述】:

最初会发布一个包含值的表,并且使用 javascript 编码可以使用带有下拉按钮的列。当我单击 drop 按钮时,会弹出一个对话框,其中包含 yes 或 no,如果单击 yes,我希望将该特定订单转移到另一个 servlet (/drop)。这是包含所有订单的订单页面 (/order)。如何将订单从该页面 (/order) 移动到放置页面 (/drop) 并从 /order 页面删除该特定订单? 这就是我所做的,我得到了错误。

(/订单)

    HttpSession session = request.getSession();
        if (session.getAttribute("user_name") != null) {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Payroll", "root", " ");
            String userName = (String) session.getAttribute("user_name");
            PreparedStatement ps = con.prepareStatement("SELECT * from Payroll.Order order by delDate asc");

            ResultSet rs = ps.executeQuery();


            out.println("<script type=\"text/javascript\">" 
                    + "function getConfirmation(){"
                    + "var retVal = confirm(\"Add to Drop List?\");"
                    + "if( retVal == true ){"
                    + "document.location=\"DvDrop\";"
                    + "return true;"
                    + "}"
                    + "else{"
                    + "document.location=\"DvOrders\";"
                    + "return false;"
                    + "}"
                    + "}"
                    + "</script>" );

            out.println(<strong>Welcome " + session.getAttribute("user_name") + "</strong>");

            out.println("<br><h2><center><b>Order List</b></center></h2><br><table border=\"1\" style=\"width:100%;border-spacing: 0.5em;text-align: center;\">");
            out.println("<tr><td><b>Order ID</b></td><td><b>Ordered Date</b></td><td><b>Ordered Time</b></td><td><b>Total Amount</b></td><td><b>Delivery Date</b></td><td><b>Add to Drop List</b></td></tr></b>");
            while (rs.next()) {
                out.println("<tr><td><a href = # style=\"width:90%;\">"+ rs.getString(1) + "</a></td><td>" + rs.getString(2) + "</td><td>" + rs.getTime(3) + "</td><td>" + rs.getDouble(4) + "</td><td>" + rs.getDate(5) + "</td>");
                out.println("<td>" + "<input type=\"button\" value=\"Add to Drop\" name=\"AddDrop\" onClick=\"getConfirmation()\">" + "</td></tr>");
            }
            out.println("</table>");
            out.println("</body>");
            out.println("</html>");
        } else {
            response.sendRedirect("login.jsp?id=Your session may be expired. You have to login first");

        }
    } catch (Exception e) {
        out.println(e);
    }
}

(/drop)

PrintWriter out = response.getWriter();
    try {
        // PrintWriter out = response.getWriter() ;
        HttpSession session = request.getSession();
        if (session.getAttribute("user_name") != null) {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Payroll", "root", " ");
            String userName = (String) session.getAttribute("user_name");
            String order = (String)session.getAttribute("Orderid");
            PreparedStatement ps = con.prepareStatement("delete * from Payroll.Order where Orderid = '" + order + "'");

            ResultSet rs = ps.executeQuery();

        }
    } catch (Exception e) {
        out.println(e);
    }

【问题讨论】:

    标签: javascript java mysql servlets


    【解决方案1】:

    我假设您的代码中出现了 Java 编译错误。如果您的/order servlet 代码与您在此处发布的代码相同,那么在您的代码中

    out.println(<strong>Welcome " + session.getAttribute("user_name") + "</strong>");
    

    有一个错误。您没有为要发送到浏览器的 HTML 正确定义字符串。您需要在&lt;strong&gt; 标记之前使用double quotes,这似乎导致Illegal start of expression 错误

    试试这个。

    HttpSession session = request.getSession();
        if (session.getAttribute("user_name") != null) {
    
            Class.forName("com.mysql.jdbc.Driver").newInstance();
    
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Payroll", "root", " ");
            String userName = (String) session.getAttribute("user_name");
            PreparedStatement ps = con.prepareStatement("SELECT * from Payroll.Order order by delDate asc");
    
            ResultSet rs = ps.executeQuery();
    
    
            out.println("<script type=\"text/javascript\">" 
                    + "function getConfirmation(id){"
                    + "var retVal = confirm(\"Add to Drop List?\");"
                    + "if( retVal == true ){"
                    + "document.location=\"DvDrop?Orderid=" + id + "\";"
                    + "return true;"
                    + "}"
                    + "else{"
                    + "document.location=\"DvOrders\";"
                    + "return false;"
                    + "}"
                    + "}"
                    + "</script>" );
    
            out.println("<strong>Welcome " + session.getAttribute("user_name") + "</strong>");
    
            out.println("<br><h2><center><b>Order List</b></center></h2><br><table border=\"1\" style=\"width:100%;border-spacing: 0.5em;text-align: center;\">");
            out.println("<tr><td><b>Order ID</b></td><td><b>Ordered Date</b></td><td><b>Ordered Time</b></td><td><b>Total Amount</b></td><td><b>Delivery Date</b></td><td><b>Add to Drop List</b></td></tr></b>");
            while (rs.next()) {
                out.println("<tr><td><a href = # style=\"width:90%;\">"+ rs.getString(1) + "</a></td><td>" + rs.getString(2) + "</td><td>" + rs.getTime(3) + "</td><td>" + rs.getDouble(4) + "</td><td>" + rs.getDate(5) + "</td>");
                out.println("<td>" + "<input type=\"button\" value=\"Add to Drop\" name=\"AddDrop\" onClick=\"getConfirmation(\'" + rs.getString(1) + "\')\" />" + "</td></tr>");
            }
            out.println("</table>");
            out.println("</body>");
            out.println("</html>");
        } else {
            response.sendRedirect("login.jsp?id=Your session may be expired. You have to login first");
    
        }
    } catch (Exception e) {
        out.println(e);
    }
    

    在这里,由于您需要将特定项目添加到下拉列表中,因此我建议您以这样的方式创建按钮,当您单击它时,它会发送要删除的订单的 ID。建议的更改已在上述代码中进行。我正在做的是将当前订单的 ID 作为参数发送给函数getConfirmation()。如果需要,您可以查看使用浏览器的检查工具生成的最终 HTML 内容。您会看到每个按钮调用相同的函数,但具有相应的订单 ID

    另外,在您的/drop servlet 中,您正在尝试执行数据操作(插入/更新/删除),但您使用的是executeQuery() 方法。相反,尝试使用executeUpdate(),类似这样的

    PrintWriter out = response.getWriter();
    try {
        // PrintWriter out = response.getWriter() ;
        HttpSession session = request.getSession();
        if (session.getAttribute("user_name") != null) {
    
            Class.forName("com.mysql.jdbc.Driver").newInstance();
    
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Payroll", "root", " ");
            String userName = (String) session.getAttribute("user_name");
            //String order = (String)session.getAttribute("Orderid");
            String order = Integer.parseInt(request.getParameter("Orderid"));
            PreparedStatement ps = con.prepareStatement("delete * from Payroll.Order where Orderid = '" + order + "'");
    
            int rs = ps.executeUpdate();
    
        }
    } catch (Exception e) {
        out.println(e);
    }
    

    除此之外,在您的 JavaScript 代码中,您正在为窗口分配一个新位置,然后立即尝试返回一些内容。在您为文档分配新位置的那一刻,当前脚本在此结束,新网页的脚本开始执行。

    我还提议对您的 JavaScript 代码进行一些更改。它们在第一个代码 sn-p 中。希望这会有所帮助!

    干杯!

    【讨论】:

    • out.println("&lt;script type=\"text/javascript\"&gt;" + "function getConfirmation(id){" + "var retVal = confirm(\"Add to Drop List?\");" + "if( retVal == true ){" + "document.location=\"DvDrop?Orderid=" + **id** + "\";" + "return true;" + "}" + "else{" + "document.location=\"DvOrders\";" 由于 id,我收到一个错误,它在代码中用红色下划线...
    • 只需删除 id 变量周围的双引号。现在,代码知道id 是一个需要附加到字符串的Java 变量。当你删除它周围的双引号时,它将被用作 JavaScript 可以访问的变量值,而对于 Java,它只是字符串的另一部分
    猜你喜欢
    • 2021-10-01
    • 2021-07-16
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多