我能够获得一个列表对象,但是如何在列表中显示值?

时间:2012-09-14 10:19:58

标签: java jsp wcs

我能够获取列表对象但是如何在列表中显示值?

<%
  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}" />

1 个答案:

答案 0 :(得分:1)

您的代码中有几个问题:

  1. java.util.Arrays.asList(list)不会将枚举转换为列表。它将创建一个包含单个元素的List:枚举。您应该使用Collections.list()来执行此操作。
  2. 没有理由将List转换为Vector。 Vector(就像Enumeration一样)是一个不应该再使用的旧类了,List就是你所需要的。
  3. 您应该使用泛型类型而不是原始类型。它可以节省你不必要的演员阵容
  4. 这段代码不应该首先在JSP中,而应该在servlet或控制器中
  5. 您正尝试从循环外部访问aString,但在循环内定义了aString
  6. JSP EL不访问局部变量。它访问页面,请求,会话或应用程序属性。如果您希望它访问局部变量,则需要将此变量存储在页面范围属性中。
  7. 我想你想显示枚举中的每个字符串。在这种情况下,您应该使用c:forEach标记,而不是while循环。
  8. 所以,代码可以写成:

    <% 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循环将保持不变。