如何在JSP中显示列表?

时间:2012-05-28 19:08:24

标签: hibernate jsp

这个Servlet,我在彩色汽车上做GROUP BY。插入请求并在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,]]

1 个答案:

答案 0 :(得分:5)

你的代码真的没有意义:

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

在上面一行中,您声明您的列表是Cars列表(不是)

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>