2012-09-14 25 views
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}" /> 
+0

請參閱[本主題]中的forEach示例(http://stackoverflow.com/questions/2147495/accessing-java-based-dom-tree-directly-from-jsf-richfaces/2147716#2147716) – roemer

回答

1

你在你的代碼的幾個問題:

  1. java.util.Arrays.asList(list)不會改變一個枚舉成一個列表。它將創建一個包含單個元素的List:枚舉。你應該使用Collections.list()來做到這一點。
  2. 沒有理由將List轉換爲Vector。 Vector(就像Enumeration一樣)是一個不應該再使用的舊類,而List則是你所需要的。
  3. 你應該使用泛型類型而不是原始類型。這將節省不必要的youmany鑄件
  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循環將保持不變。

+0

Hi Nizet ,非常感謝你的幫助..但還有一件事是在那ab.findByRFQId(13001L)是我硬編碼..但我需要通過動態獲得,枚舉枚舉=(枚舉)ab .findByRFQId(用request.getParameter(rfqBean.rfqId));如果我寫這樣我得到「的方法,類型RFQProdAccessBean findByRFQId (龍)不適用於參數(字符串&#41 」 – sandy444

+0

那麼你的確需要一個'Long.valueOf()'調用(或類似)。我只是簡單地把你的代碼放在原處,並儘可能簡化它。 –

相關問題