【问题标题】:Dynamic dropdown returns a null from jsp动态下拉从jsp返回一个null
【发布时间】:2019-08-11 20:44:14
【问题描述】:

我编写了一个由数据库填充的下拉列表。这是我在 JSP 文件中的下拉代码。

 <td>Category:</td>
 <%
  try {
      dbConnect dbConnect = new dbConnect();
      Connection currentCon = dbConnect.Connect();
      System.out.println("Connection sucess");
      String sql = "SELECT * FROM categories";
      PreparedStatement ps = currentCon.prepareStatement(sql);
      ResultSet rs = ps.executeQuery();%>
 <td><select name="category" class="form-control" required>
      <%
        while (rs.next()) {
           String cname = rs.getString("category_name");
           String id = rs.getString("category_id");
           System.out.println(id);
      %>
      <option value="<%= id%>"><%= cname%></option>
      <%
        }
      %>
      </select>
      <%
      } catch (SQLException sqe) {
            out.println(sqe);
      }
 %>
 </td>

相关的servlet代码是;

String id = request.getParameter("category");

在 JSP 的下拉列表中,它会打印类别中的所有 ID。但是当涉及到 servlet 时,它返回一个空值。如何解决这个问题?

【问题讨论】:

  • id 和 cname 似乎超出了 的范围。您可以尝试在父范围内声明它们吗?
  • 还是一样。

标签: java mysql jsp servlets jakarta-ee


【解决方案1】:

我在您的代码中没有找到任何&lt;form&gt; tagsubmit 按钮,请尝试以下代码:

    <td>Category:</td>
     <form method="post"  action="yourservleturl">//form tag for submitting data

         <%
          try {
              dbConnect dbConnect = new dbConnect();
              Connection currentCon = dbConnect.Connect();
              System.out.println("Connection sucess");
              String sql = "SELECT * FROM categories";
              PreparedStatement ps = currentCon.prepareStatement(sql);
              ResultSet rs = ps.executeQuery();%>
         <td><select name="category" class="form-control" required>
              <%
                while (rs.next()) {

              %>
              <option value="<%=rs.getString("category_id")%>"><%=rs.getString("category_name")%></option> // printing option values
              <%
                }
              %>
              </select>
              <%
              } catch (SQLException sqe) {
                    out.println(sqe);
              }
         %>
     <input type="submit" value="submit">///submit btn
  </form>
</td>

还可以通过String id = request.getParameter("category"); 获取下拉值。它应该可以工作。

【讨论】:

    【解决方案2】:

    局部变量应该在while循环之外,因为你需要while循环之后的值。

    <%
    try {
      dbConnect dbConnect = new dbConnect();
      Connection currentCon = dbConnect.Connect();
      System.out.println("Connection sucess");
      String sql = "SELECT * FROM categories";
      PreparedStatement ps = currentCon.prepareStatement(sql);
      ResultSet rs = ps.executeQuery();%>
      String cname = null;
      String id = null;
     <td><select name="category" class="form-control" required>
      <%
        while (rs.next()) {
           cname = rs.getString("category_name");
           id = rs.getString("category_id");
           System.out.println(id);
      %>
    

    另外,我建议你使用表达式语言而不是&lt;%= id%&gt;

    改变 &lt;option value="&lt;%= id%&gt;"&gt;&lt;%= cname%&gt;&lt;/option&gt;

    &lt;option value="${id}"&gt;${name}&lt;/option&gt;

    别忘了提交按钮。

    【讨论】:

    • 仍然返回空值
    • @NethminiRomina ,你能在你的数据库中获取包含类别的下拉框吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2015-09-09
    相关资源
    最近更新 更多