我能够获取列表对象,但是如何在列表中显示值???
<%
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}" />
最佳答案
您的代码中有几个问题:
java.util.Arrays.asList(list)
不会将枚举转换为列表。它将创建一个包含单个元素的列表:枚举。您应该使用 Collections.list()来做到这一点。- 没有理由将列表转换为 vector 。 Vector(顺便说一句,就像 Enumeration 一样)是一个旧类,不应再使用,而 List 拥有您需要的一切。
- 您应该使用泛型类型而不是原始类型。它会为你节省许多不必要的转换
- 此代码首先不应该位于 JSP 中,而应该位于 servlet 或 Controller 中
- 您尝试从循环外部访问
aString
,但 aString 是在循环内部定义的 - JSP EL 不访问局部变量。它访问页面、请求、 session 或应用程序属性。如果您希望它访问局部变量,则需要将该变量存储在页面范围属性中。
- 我猜您想显示枚举中的每个字符串。在这种情况下,您应该使用
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 循环将保持不变。
关于java - 我可以获得一个列表对象,但是如何在列表中显示值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422573/