【问题标题】:Fetch value from database and populate it using the list into dropdown based on another dropdown value [duplicate]从数据库中获取值并使用列表将其填充到基于另一个下拉值的下拉列表中[重复]
【发布时间】:2020-07-12 07:45:57
【问题描述】:

我做了一个jsp页面,在第一个下拉列表的变化中,第二个下拉列表的值必须相应地改变。

两个下拉菜单的值都是从数据库中获取的。

正在获取第二个下拉列表的值,因为第一个下拉列表的值是该表中的外键。

使用下拉菜单 1 的 onchange 事件,我正在调用 js 函数并将其传递给 servlet 以执行该函数。

我对这个概念很陌生,我确信我在我的 servlet 代码中犯了错误。 我也使用了 firefox 检查,据它说,facno 正在被转移到 servlet,但是那里没有响应,这就是为什么一旦第一个下拉列表的值发生变化,第二个下拉列表就会变空。 请帮我解决同样的问题。

JAVASCRIPT 代码:

function Fill() {

        var facno = document.getElementById("facname").value;
        var xhttp = new XMLHttpRequest();
        xhttp.overrideMimeType("text/html;charset=UTF-8");
        xhttp.onreadystatechange = function() {

            if (xhttp.readyState === 4 && xhttp.status === 200) {
                document.getElementById("subname").innerHTML = xhttp.responseText;

            }
        };

        xhttp.open("POST", "DropFill?facnoajax=" + facno, true);
        xhttp.send();
    }

JSP 代码:

下拉菜单 1:

<%
                    Connection con = null;
                    con = DBConnection.createConnection();
                    PreparedStatement ps = null;
                    try {
                        String sql = "SELECT fac_no, fac_name FROM faculty_info";
                        ps = con.prepareStatement(sql);
                        ResultSet rs = ps.executeQuery();
                %>



                <div class="form-group row">
                    <label class="col-form-label col-md-3" for="facname">Faculty:</label>
                    <div class="col-md-4">
                        <select name="facname" id="facname" class="form-control"
                            onchange="Fill()" required>
                            <option value="" selected>Choose any:</option>

                            <%
                                while (rs.next()) {
                                        String facname = rs.getString("fac_name");
                                        String facno = rs.getString("fac_no");
                            %>
                            <option value="<%=facno%>"><%=facname%></option>
                            <%
                                }
                            %>
                        </select>
                    </div>
                </div>


                <%
                    } catch (SQLException sqe) {
                        out.println(sqe);
                    }
                %>

下拉 2:

<div class="form-group row" id="dd2">
                    <label class="col-form-label col-md-3" for="subname">Subject:</label>
                    <div class="col-md-4">
                        <select id="subname" name="subname" class="form-control" required>
                        <option value="" selected>Choose any:</option>

                        </select>
                    </div>
                </div>

服务代码:

public class DropFill extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public DropFill() {
        super();
        // TODO Auto-generated constructor stub
    }

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

        response.setContentType("text/html;charset=UTF-8");


        try (PrintWriter out = response.getWriter()) {

            ArrayList<String> subname = new ArrayList<String>();
            ArrayList<String> subno = new ArrayList<String>();

            Connection con = null;
            con = DBConnection.createConnection();
            PreparedStatement ps = null;
            String facno = request.getParameter("facnoajax");
            try {
                String sql = "SELECT sub_name FROM subject_info WHERE fac_no='" + facno + "'";
                ps = con.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();

                while (rs.next()) {
                    subname.add(rs.getString("sub_name"));
                    subno.add(rs.getString("sub_no"));
                }

                for (int i = 0; i < subname.size(); i++) {
                    for (int j = 0; j <= subno.size(); j++)
                        response.getWriter().write("<select> <option value=" + subno.get(j) + ">" + subname.get(i)
                                + "</option> </select>");
                }

            }

            catch (SQLException sqe) {
                out.println(sqe);
            }

        }

    }
}

【问题讨论】:

  • 只需在 catch 块后写 response.getWriter().write("Hi"); 看看是否会返回,还要检查您的浏览器控制台是否显示任何错误。最后,您在 ajax 中使用了 post 我认为您需要放置你在doPost servlet 方法中的代码也试试这个看看。
  • @Swati 不起作用,放置代码 dopost 方法时仍然无效。此外,即使在 catch 块之后写入消息 hi 也没有返回。我检查了浏览器控制台,没有错误。网络选项卡显示正在发送带有所需值的 facnoajax。

标签: javascript html ajax servlets


【解决方案1】:

JSP

<td><select name="class_main" id="class_main"
                        onchange="this.form.submit();">
                            <option value="0">Select class</option>
                            <%
                                try {
                                    String url = "jdbc:mysql://localhost:3306/online_exam?useTimezone=ture&serverTimezone=UTC";
                                    Connection com = DriverManager.getConnection(url, "root", "");
                                    PreparedStatement ps = com.prepareStatement("select * from class");
                                    ResultSet rs = ps.executeQuery();
                                    while (rs.next()) {
                            %>
                            <option value="<%=rs.getInt("classid")%>"
                                <%if (request.getParameter("class_main") != null) {
                        if (rs.getInt("classid") == Integer.parseInt(request.getParameter("class_main"))) {
                            out.print("selected");
                        }
                    }%>><%=rs.getString("classname")%></option>
                            <%
                                }
                                    classid = request.getParameter("class_main");
                                    System.out.println("From class " + classid);
                                } catch (Exception e) {
                                    System.out.println(e.getMessage());
                                }
                            %>
                    </select></td>
                </tr>

                <tr>
                    <td><label>Choose Subject :</label></td>

                    <td><select name="subject" id="subject"
                        onchange="this.form.submit();">
                            <option value="0">Select Subject</option>
                            <%
                                try {
                                    String url = "jdbc:mysql://localhost:3306/online_exam?useTimezone=ture&serverTimezone=UTC";
                                    Connection com = DriverManager.getConnection(url, "root", "");
                                    PreparedStatement ps = com.prepareStatement("select * from subject where classid = ?");
                                    ps.setString(1, request.getParameter("class_main"));
                                    ResultSet rs = ps.executeQuery();
                                    while (rs.next()) {
                            %>
                            <option value="<%=rs.getInt("subjectid")%>"
                                <%if (request.getParameter("subject") != null) {
                        if (rs.getInt("subjectid") == Integer.parseInt(request.getParameter("subject"))) {
                            out.print("selected");
                        }
                    }%>><%=rs.getString("subjectname")%></option>
                            <%
                                }
                                    subjectid = request.getParameter("subject");
                                    System.out.println("from subject " + subjectid);
                                } catch (Exception e) {
                                    System.out.println(e.getMessage());
                                }
                            %>

                    </select></td>
                </tr>
                <tr>
                    <td><label>Choose Chapter :</label></td>

                    <td><select name="chapter" id="chapter"
                        onchange="this.form.submit();">
                            <option value="0">Select Chapter</option>

                            <%
                                try {
                                    String url = "jdbc:mysql://localhost:3306/online_exam?useTimezone=ture&serverTimezone=UTC";
                                    Connection com = DriverManager.getConnection(url, "root", "");
                                    PreparedStatement ps = com
                                            .prepareStatement("select * from chapter where classid = ? and subjectid = ?");
                                    ps.setString(1, request.getParameter("class_main"));
                                    ps.setString(2, request.getParameter("subject"));
                                    ResultSet rs = ps.executeQuery();
                                    while (rs.next()) {
                            %>
                            <option value="<%=rs.getInt("chapterid")%>"
                                <%if (request.getParameter("chapter") != null) {
                        if (rs.getInt("chapterid") == Integer.parseInt(request.getParameter("chapter"))) {
                            out.print("selected");
                        }
                    }%>><%=rs.getString("chaptername")%></option>
                            <%
                                }
                                    chapterid = request.getParameter("chapter");
                                    System.out.println("From chapter " + chapterid);
                                } catch (Exception e) {
                                    System.out.println(e.getMessage());
                                }
                            %>

</select></td>

【讨论】:

  • 我为我的项目创建了相同的依赖选择字段。这里是
  • 你的方式不会填充我的第二个下拉列表。还使用您的方式刷新整个页面,因此我在表单的其他字段中丢失了数据。像这样,我之前也实现了同样的效果,但它刷新了页面,然后建议使用 ajax 来避免这种情况,这就是我在编码中遇到问题的地方。
猜你喜欢
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多