这个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,]]
答案 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>