当前位置: 首页 > 知识库问答 >
问题:

如何将动态值传递给java serlvet?[重复]

拓拔泓
2023-03-14

(更新)

我正在使用java servlet和oracle sql构建酒店管理<我从数据库打印一个html表,如果我更改了传递给另一个servlet的值,我需要更新一行<这是我的第一个servlet

    if(request.getParameter("hotelTableBtn") != null){
        String query = "select * from Hotels";
        response.setCharacterEncoding("utf-8");
        Connection conn;

        try{
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","system","root");
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(query);
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();

            pw.println("<table border=1 style=border-collapse:collapse>");  
            pw.println("<tr>");

            for(int i = 1; i <= columnCount; i++){
                pw.println("<th>" + metaData.getColumnName(i));
            }

            pw.println("</tr>");
            pw.println();
            String name = "";

            while(rs.next()){                       
                int i;
                int row = rs.getRow();

                pw.write("<form action=/ThesisAdmin/PrintTables method=post target=_self>");
                pw.println("<tr>");


                for(i = 1; i <= columnCount; i++){

                    if(i == 1)
                        name = "name";
                    else if (i == 2)
                        name = "category";
                    else if (i == 3)
                        name = "address";
                    else if (i == 4)
                        name = "phone";
                    else
                        name = "email";

                    pw.println("<td style=border:none> <input type=text value=" + rs.getString(i) + " name=" + name + "> </td>");                           
                }
                    pw.println("<td> <input type=submit value=update name=updateBtn> </td>");

                    pw.println("</tr>");
                    pw.write("</form");

                    pw.println();
                }
                pw.println("</table>");

        }catch (Exception e){
            pw.write("" + e);
        }
    }

这是html表的示例

表格样本

现在,我需要更新行值并将其发送到数据库,这是第二个servlet打印表

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html");
    Writer writer = response.getWriter();

    try{
        Class.forName("oracle.jdbc.driver.OracleDriver");
    }catch(Exception e){
        writer.write("" + e);
    }

    if(request.getParameter("updateBtn") != null){

        String  hotelName = request.getParameter("name");
        String  hotelCategory = request.getParameter("category");
        String  hotelAddress = request.getParameter("address");
        String  hotelPhone = request.getParameter("email");
        String  hotelEmail = request.getParameter("phone");


        try{
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","system","root");
            String update = "update Hotels set Name=?,Category=?,Address=?,Phone=?,Email=? where Name= '"+hotelName+"' ";
            PreparedStatement pst = conn.prepareStatement(update);

            pst.setString(1, hotelName);
            pst.setString(2, hotelCategory);
            pst.setString(3, hotelAddress);
            pst.setString(4, hotelPhone);
            pst.setString(5, hotelEmail);
            pst.executeUpdate();

        }catch(Exception e){
            writer.write("" + e);
        }
    }
}

我像这样更新了我的代码,但只有第一个按钮有效。有什么想法吗?提前谢谢你。

(更新)

最后,我的程序通过每行添加一个新表来工作。还增加了一个删除按钮。解决方案:

            pw.println("<table border=1 style=border-collapse:collapse>");  

            pw.println();
            String name = "";
            int cnt = 0;    

            while(rs.next()){                       
                int i;
                //int row = rs.getRow();

                pw.println("<tr>");
                pw.println("<table><tr><td>");
                pw.println("<tr>");

                if(cnt == 0){
                    for(i = 1; i <= columnCount; i++){
                        pw.println("<th>" + metaData.getColumnName(i));
                    }
                    cnt = 1;
                }


                pw.println("</tr>");
                pw.write("<form action=/ThesisAdmin/PrintTables method=post target=_self>");

                for(i = 1; i <= columnCount; i++){

                    if(i == 1)
                        name = "name";
                    else if (i == 2)
                        name = "category";
                    else if (i == 3)
                        name = "address";
                    else if (i == 4)
                        name = "phone";
                    else
                        name = "email";

                    pw.println("<td style=border:none> <input type=text value=" + rs.getString(i) + " name=" + name + "> </td>");                           
                }

                    pw.println("<td> <input type=submit value=update name=updateBtn> </td>");
                    pw.println("<td><input type=submit value=delete name=deleteBtn> </td>");

                    pw.write("</form>");
                    pw.write("</td></tr></table>");
                    pw.println("</tr>");
                    pw.println();
                }
                pw.println("</table>");

桌子

共有1个答案

江仲渊
2023-03-14

数据库表和html表中的每一行都代表一个对象。
每个对象都必须有一个id。

您应该为每一行添加一个带有对象ID的隐藏输入字段。
并且为每一行/对象提供单独的表单。

 类似资料:
  • 当我关闭一个活动时,我希望它将一个值传递给另一个活动中的一个片段,我该怎么做? 活动B 片段A 代码不起作用,因为它给了我一个错误 谢啦

  • 问题内容: 我是Spring的新手。 这是bean注册的代码: 这是我的bean类: 这是我执行操作的主要方法: 现在,我想用参数调用此构造函数,并且这些参数是在我的主要方法中动态生成的。这就是我想动态传递- 而不是像文件中声明的那样静态传递的意思。 问题答案: 请看一下构造函数注入。 此外,请查看IntializingBean和BeanPostProcessor,以了解Springbean的其他

  • 我不熟悉Spring。 这是bean注册的代码: 这是我的豆子课: 这是我执行动作的主要方法: 现在我想用参数调用这个构造函数,这些参数是在我的主要方法中动态生成的。这就是我想动态传递的意思——而不是静态传递,就像我的文件中声明的那样。

  • 问题内容: 在我的ASP.NET MVC应用程序中,我希望用户将值添加到文本框中,然后按Ajax.ActionLink。我想做这样的事情: Ajax.ActionLink(“ Go”,“ Action”,“ Controller”,新的{value = textbox1.value}) 还是我还能如何使此文本框值返回到我的操作?jQuery的? 问题答案: 您可以使用AJAX $ .get方法运行

  • 问题内容: Docker 1.9允许将参数传递给dockerfile。参见链接:https : //docs.docker.com/engine/reference/builder/#arg 我该如何在ENTRYPOINT指令中传递相同的药品? 我的dockerfile有 ARG $ Version = 3.1 ENTRYPOINT /tmp/folder-$Version/sample.sh开始

  • 我想写一个组件,它根据输入显示不同的图标。图标框架希望它采用以下格式: 因此<代码> data-icon = " B " > < /代码描述了基本上 但这似乎不起作用。:-/有没有一种方法可以做到这一点,而不必在我的组件类中创建html并将其附加到html中?