1

リスト オブジェクトを取得することはできますが、リストに値を表示するにはどうすればよいですか?

<%
  com.ibm.commerce.utf.objects.RFQProdAccessBean ab= new com.ibm.commerce.utf.objects.RFQProdAccessBean();
  Enumeration list = (java.util.Enumeration)ab.findByRFQId(java.lang.Long.parseLong("13001"));
  System.out.println("*******"+list);
  Vector aVector = new Vector(java.util.Arrays.asList(list));
  Iterator nums = aVector.iterator();

  while(nums.hasNext()) {
    String aString = (String)nums.next();
    System.out.println("************"+aString);
  }
%>    
<c:out value="${aString}" />
4

1 に答える 1

1

コードにいくつかの問題があります。

  1. java.util.Arrays.asList(list)列挙型をリストに変換しません。列挙型という単一の要素を含むリストが作成されます。これを行うには、 Collections.list()を使用する必要があります。
  2. リストをベクトルに変換する理由はありません。Vector(ちなみに、Enumerationなど)は、もう使用すべきではない古いクラスであり、Listには必要なものがすべて揃っています。
  3. 生の型ではなく、ジェネリック型を使用する必要があります。それはあなたに多くの不必要なキャストを救うでしょう
  4. このコードは、そもそもJSPにあるべきではなく、サーブレットまたはコントローラーにあるべきです。
  5. ループの外側からアクセスしようとしていますaStringが、aStringはループの内側で定義されています
  6. JSPELはローカル変数にアクセスしません。ページ、リクエスト、セッション、またはアプリケーションの属性にアクセスします。ローカル変数にアクセスする場合は、この変数をページスコープ属性に格納する必要があります。
  7. 列挙型のすべての文字列を表示したいと思います。その場合、c:forEachwhileループではなく、タグを使用する必要があります。

したがって、コードは次のように記述できます。

<% RFQProdAccessBean ab= new RFQProdAccessBean();
   Enumeration<String> enumeration = (Enumeration<String>) ab.findByRFQId(13001L);
   pageContext.setAttribute("list", Collections.list(enumeration));
%>
<c:forEach var="element" items="${list}">
    <c:out value="${element}"/>
</c:forEach>

ただし、繰り返しますが、JavaコードはJSPの外にあり、リストをリクエスト属性に格納する必要があります。forEachループは変更されません。

于 2012-09-14T10:32:44.697 に答える