2010-07-16 105 views
2

我知道這已被問過,但它不適合我。如何使用jstl從數據庫填充下拉列表?

我想使用JSTL來填充下拉從數據庫列表,這是我作爲一個useBean的使用類:

public class feedData { 

    Connection con; 

    public feedData() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException { 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     String url = "******"; 

     con = DriverManager.getConnection(url, "**", "**"); 

    } 

    public ArrayList<String> getUnis() throws SQLException { 
     ArrayList<String> uniList = new ArrayList<String>(); 
     String tryquery = "select aff from libra.smalluniqdbtmp"; 
     Statement stmt2 = con.createStatement(); 
     ResultSet rs1 = stmt2.executeQuery(tryquery); 

     while (rs1.next()) { 

      uniList.add(rs1.getString("aff")); 

     } 

     return uniList; 
    } 

    public ArrayList<String> getRI() throws SQLException { 
     ArrayList<String> RIList = new ArrayList<String>(); 
     String tryquery = "select interest from libra.riuniqdb"; 
     Statement stmt2 = con.createStatement(); 
     ResultSet rs1 = stmt2.executeQuery(tryquery); 

     while (rs1.next()) { 

      RIList.add(rs1.getString("aff")); 

     } 

     return RIList; 
    } 
} 

,這裏是我的jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 

     <jsp:useBean id="obj" scope="page" class="uiLibraWeb2Pkg.feedData" /> 
     <h1>Hello World!</h1> 
     <table border="1"> 
      <thead> 
       <tr> 
        <th></th> 
        <th></th> 
        <th></th> 
        <th></th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td> <form action="response.jsp"> 
          <strong>Select a university:</strong> 

          <select name="affiliation"> 
           <c:forEach var="aff" items="${obj.unis}"> 
            <option value="${aff}"></option> 
           </c:forEach> 

          </select> 

         </form> 

        </td> 
        <td></td> 
        <td></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td></td> 
        <td></td> 
        <td></td> 
        <td></td> 
       </tr> 
      </tbody> 
     </table> 

    </body> 
</html> 

有沒有錯誤消息在服務器日誌和項目的生成輸出中,但下拉列表爲空。一直在努力,我不知道什麼是錯的。我也嘗試設置一個數據源,並使用jstl遍歷查詢的結果集來執行此操作,但是其行爲方式相同。

現在我不依賴任何數據源,但仍然是相同的結果。

幫助表示讚賞,感謝

回答

5

我還沒有測試過你的代碼,但是請在服務器端添加一個斷點來檢查列表中有多少元素。也許它在服務器端也是空的。

的第二點是,這個代碼

<option value="${aff}"></option> 

不顯示任何東西給用戶,因爲它是在HTML渲染爲不帶文字的選項。也許它應該是

<option value="${aff}">${aff}</option> 
+0

感謝您的建議,工作。我愚蠢。 – 2010-07-16 20:27:31

1

右擊在網頁瀏覽器的HTML頁面和查看源。很有可能你看到JSTL標籤沒有在那裏解析。這是正確的,你沒有在JSP的頂部導入JSTL標籤庫爲每JSTL core taglib documentation

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

(以及由@Guido進一步提及也不要忘記設置選項標籤)

如果這樣不能解決問題,並且你得到了無法識別的taglib的編譯錯誤,那麼這意味着servletcontainer問題並沒有附帶JSTL,你必須自己安裝JSTL。這基本上很簡單:只需將jstl-1.2.jar放入您的web應用的/WEB-INF/lib並重新部署即可。

如果您想知道爲什麼JSP標籤不需要它,那是因爲它們默認已被JspServlet識別。任何其他taglibs應該在JSP的頂部明確聲明爲@taglib


與實際問題無關:您的JDBC代碼看起來不正確。你沒有關閉連接,從而泄漏資源。如果您長時間重複運行此操作,那麼數據庫將耗盡連接,並且您的應用程序將中斷。您可能會發現this article有助於瞭解如何正確使用JDBC代碼。

+0

謝謝你所指的taglib在代碼中。當我從代碼中刪除一些評論時,它被刪除了。我的壞,不能指望人們在我犯這樣的錯誤時提供幫助。 感謝您的JDBC文章,我會查找它。 – 2010-07-16 20:29:33