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. 没有理由将 List 转换为 Vector。Vector(顺便说一下,就像 Enumeration 一样)是一个不应再使用的旧类,而 List 拥有您所需要的一切。
  3. 您应该使用泛型类型而不是原始类型。它将为您节省许多不必要的演员表
  4. 这段代码首先不应该在 JSP 中,而应该在 servlet 或控制器中
  5. 您正在尝试aString从循环外部访问,但 aString 是在循环内部定义的
  6. JSP EL 不访问局部变量。它访问页面、请求、会话或应用程序属性。如果您希望它访问局部变量,则需要将此变量存储在页面范围属性中。
  7. 我猜你想显示枚举中的每个字符串。在这种情况下,您应该使用c:forEach标签,而不是 while 循环。

所以,代码可以这样写:

<% 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 回答