java - 如何在java中使用LinkedHashMap从sql server数据库填充下拉列表

标签 java sql-server jstl html.dropdownlistfor linkedhashmap

在 SQL Server 数据库中,我有一个表,其中包含三列,即 Ref_Name、Ref_from 和 Ref_to。现在我想要一个下拉列表来按行保存值,即该行的所有列值应按以下方式显示在下拉列表中:-

Reference-1(2014-10-10 07:17:00.000 to 2014-10-10 08:46:00.000)

Reference-2(2014-09-01 10:00:00.000 to 2014-09-01 11:00:00.000)

为此,我使用 LinkedHashMap 作为:-

    public LinkedHashMap<String, List<String>> connect()
    {
        ArrayList<String> list = new ArrayList<String>();
        try
        { 
            con = getConnection();
            stmt = con.createStatement();
            String sql="select Ref_No,From_Date,To_Date from Ref_time";
            stmt.executeQuery(sql);
            rs = stmt.getResultSet();
            while (rs.next()) 
            {
                list.add(rs.getString(2));
                list.add(rs.getString(3));
                ref.put(rs.getString(1), list);
            }

        }
        catch( Exception e )
        {
            System.out.println("\nException "+e);
        }
        finally
        {
            //closeConnection(stmt, rs, con);
        }
         return ref;
    }

当我在jsp中使用它时

<select name="ref_logtime">
<c:forEach var="aff" items="${obj.connect()}">
<option value="${aff.key}">${aff.key}</option>
<option value="${aff.value}">${aff.value}</option>
</c:forEach>
</select>

然后在下拉列表中,我得到的值为:-

 Reference-1
 All datetime entries are shown here
 Reference-2
 All datetime entries are shown here

但我希望我的下拉列表按行显示值。如何做到这一点?

最佳答案

您的代码有两个问题。首先,每个引用映射都需要有自己的 List 。目前,该列表正在共享,因此两个引用条目都会显示所有日期。将代码更改为

rs = stmt.executeQuery(sql);
while (rs.next()) 
{
    List<String> list = new ArrayList<String>();
    list.add(rs.getString(2));
    list.add(rs.getString(3));
    ref.put(rs.getString(1), list);
}

第二个问题与 JSTL 标记有关。您只需要一个<option>循环中的标记将为您运行两次(因为您有两个来自数据库的引用条目)以生成两个 <option>标记条目。

<select name="ref_logtime">
  <c:forEach var="aff" items="${obj.connect()}">
    <option value="${aff.key}">${aff.key} ${aff.value}</option>
  </c:forEach>
</select>

关于java - 如何在java中使用LinkedHashMap从sql server数据库填充下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407312/

相关文章:

java - 如何在Java中以编程方式设置后备字体?

java - 如何查找 url 是 utf-8 还是 utf-16

JSP 页面中的 javax.el.PropertyNotFoundException

java - 在 JSP 中,如何识别列表中存在的对象类型?

java - 未终止 <表格 :input tag

Java8 流无法解析变量

java - 我对java完全陌生,想知道是否有任何方法可以改进这个程序

python - sqlalchemy 批量插入比构建原始 SQL 慢

sql-server - 如何创建需要两个外键之一的表?

sql - 如何有效地选择小于和大于给定值的最接近值?