2012-05-28 80 views
1

這個Servlet,我在彩色汽車上做GROUP BY。插入請求並在jsp 中做廣告,但不轉換。如何在JSP中顯示列表?

Query query = session.createQuery("select count(carColor), carColor from Cars group by carColor order by carColor"); 
    List<Cars> list = query.list(); 
    Iterator iter = list.iterator(); 
    while (iter.hasNext()) { 
     Object[] obj = (Object[]) iter.next(); 
     System.out.println(obj[0] + " " + obj[1]); 

    } 

    request.setAttribute("list", list); 

    RequestDispatcher rd = request.getRequestDispatcher("test.jsp"); 
    rd.forward(request, response); 

控制檯: 2白色 10黑色 5藍

JSP: [[Ljava.lang.Object; @ 1f3b536,[Ljava.lang.Object; @ fdffb1,]]

回答

5

您的代碼確實是沒有意義的:

List<Cars> list = query.list(); 

在上面的線,你宣佈你的列表(汽車的列表,它爲n OT)

Iterator iter = list.iterator(); 
while (iter.hasNext()) { 
    Object[] obj = (Object[]) iter.next(); 

然後迭代名單上,每個元素轉換爲Object[]。汽車實例怎麼可能是一個Object[]?該列表應聲明爲List<Object[]>,並且不應使用原始類型。你的循環應該寫成

Iterator<Object[]> iter = list.iterator(); 
while (iter.hasNext()) { 
    Object[] obj = iter.next(); 

甚至更​​簡單:

for (Object[] obj : list) { 

現在,在JSP,我你僅僅使用${list}顯示列表懷疑。這隻需在列表中調用toString()方法,該方法本身會調用每個元素的toString()方法。由於每個元素都是Object[],因此結果字符串爲[Ljava.lang.Object;@1f3b536,這意味着「使用hashCode 1f3b536的Object的數組」。

顯示列表中的元素,你應該遍歷列表,你都必須做在Java代碼:

<c:forEach var="array" items="${list}"> 
    Count: ${array[0]} - Color: <c:out value="${array[1]}"/> <br/> 
</c:forEach> 
+0

JB Nizet非常感謝您! –