2016-03-11 42 views
-1

有一個包含字符串數組的ArrayList。每個字符串數組包含每行的值。我想在JSP中打印這個。我試圖直接從servlet打印它,但它的工作非常緩慢,因爲有很多數據。如何在JSP EL中執行此操作?在Jsp中打印字符串數組的Arraylist的最有效方法是什麼?

public void printTableData(List<String[]> dataTable, PrintWriter out) { 
     System.out.println(dataTable); 
     out.println("<table border='1'>"); 
     out.println("<tr>"); 
     for (int j = 0; j < dataTable.get(0).length; j++) { 
      out.println("<th>" + dataTable.get(0)[j] + "</th>"); 
     } 
     out.println("</tr>"); 
     if (dataTable.size() > 1) 
      for (int i = 1; i < dataTable.size(); i++) { 
       out.println("<tr>"); 
       for (int j = 1; j < dataTable.get(i).length; j++) { 
        out.println("<td>" + dataTable.get(i)[j] + "</td>"); 

       } 
       out.println("</tr>"); 
      } 
     out.println("</table>"); 
    } 

} 
+0

dataTable.forEach(的System.out ::的println);我在這裏使用lambdas ..或使用迭代器。 – SmashCode

+0

「大量數據」是什麼意思?數千行?如果是這種情況,那麼這是你的問題,你應該「分」結果。 無論如何,一個好的java分析器將大大幫助你找到時間丟失的地方 – spi

+0

看看谷歌是如何做到的。它被稱爲「過濾」和「分頁」。他們沒有在單個頁面中同時顯示所有這些gazillion互聯網搜索結果。 Webbrowsers根本不會咀嚼。 – BalusC

回答

0

首先將數據傳遞給您的請求。 創建一個表頭之後:

<table class="your_class"> 
    <thead> 
     <tr> 
      <th>Title</th> 
      <th>More</th> 
      <th>Other</th> 
     </tr> 
    </thead> 

然後遍歷元素與<for:each>

<tbody> 
     <c:forEach items="${list}" var="data"> 
      <tr class="your_class"> 
       <td>${data.attribute1}</td> 
       <td>${data.attribute2}</td> 
       <td>${data.attribute3}</td> 
      </tr> 
     </c:forEach> 
    </tbody> 
</table> 
+0

列數不是恆定的。它每次都會改變。 –

+0

和?使用'c:if'並嵌套'for each'來實現與java相同的結果,我們會給你工具,但不會讓你工作 –

+0

你忘了剝離不相關的相關類並提及潛在的XSS攻擊在未經測試的方法中出現漏洞。 – BalusC

0

也許如果您使用StringBuilder連接字符串將提高您的性能。

public void printTableData(List<String[]> dataTable, PrintWriter out) { 
    System.out.println(dataTable); 
    StringBuilder sb = new StringBuilder(); 
    sb.append("<table border='1'>\n"); 
    sb.append("<tr>\n"); 
    for (int j = 0; j < dataTable.get(0).length; j++) { 
     sb.append("<th>"); 
     sb.append(dataTable.get(0)[j]); 
     sb.append("</th>\n"); 
    } 
    sb.append("</tr>\n"); 
    if (dataTable.size() > 1) 
     for (int i = 1; i < dataTable.size(); i++) { 
      sb.append("<tr>\n"); 
      for (int j = 1; j < dataTable.get(i).length; j++) { 
       sb.append("<td>"); 
       sb.append(dataTable.get(i)[j]); 
       sb.append("</td>\n"); 

      } 
      sb.append("</tr>\n"); 
     } 
    sb.append("</table>\n"); 
    out.println(sb.toString()); 
    } 

} 
0

的問題是如何在JSP迭代...所以...

  • 首先,您需要將列表添加到請求屬性中:

    request.setAttribute("list", dataTable) 
    
  • 然後,您可以用jsp c:forEach標籤

    <c:forEach items="${list}" var="entry"> 
        <!-- iterate here using ${entry} --> 
    </c:forEach> 
    

您還可以使用varStatus="loop",如果你使用JSP 2.0

0

我去Bazz答案迭代。下面的代碼應該可以正常工作。您需要在請求屬性中添加listName模型。

<c:forEach var="listVar" items="${listName}"> 
<option value ="10"><c:out value="${listVar.attribute}"/></option> 

相關問題