1

这个 Servlet,我在 color car 上做 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,]]

4

1 回答 1

5

你的代码真的没有意义:

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

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

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

然后迭代列表,并将每个元素转换为Object[]. Cars 实例怎么可能是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 的对象数组”。

要显示列表的元素,您应该遍历列表,因为您必须在 Java 代码中执行此操作:

<c:forEach var="array" items="${list}">
    Count: ${array[0]} - Color: <c:out value="${array[1]}"/> <br/>
</c:forEach>
于 2012-05-28T19:24:49.790 回答