1

このサーブレット、私はカラーカーでGROUPBYを実行します。リクエストに挿入され、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();

上記の行で、リストが車のリストであることを宣言します(そうではありません)

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

次に、リストを繰り返し処理し、各要素をにキャストしObject[]ます。CarsインスタンスはどのようになりますObject[]か?リストはとして宣言List<Object[]>する必要があり、raw型は使用しないでください。ループは次のように書く必要があります

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、「hashCode1f3b536のオブジェクトの配列」を意味します。

リストの要素を表示するには、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 に答える