2010-09-09 22 views
2

我試圖用一個jsp文件,此其代碼生成CSV文件:CSV JSP生成的文件,如何插入一個分界線

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%-- Set the content type --%> 
<%@ page contentType="text/csv"%> 

<c:forEach items="${chartData}" var="chartDataEntry" varStatus="status"> 
${chartDataEntry.date}, ${chartDataEntry.open}, ${chartDataEntry.high}, ${chartDataEntry.low}, ${chartDataEntry.close}, ${chartDataEntry.volume} 
</c:forEach> 

它很簡單,並能正常工作。問題是我需要在每行之後插入一條分隔線,但我無法使其工作。我嘗試了常用的方法:\ n \ r \ n等等。

任何想法?

回答

2

在JSP中,有太多的環境因素可能會導致這種情況。 JSP本身也會發出一些「無意的」空白和其他字符。此外,trimSpaces設置可能會吃一些空白/換行符。 (ab)將JSP用於除純HTML之外的其他內容通常被認爲是不好的做法。

而是使用servlet而不是爲一個強大和一致的CSV輸出:

protected void doGet(HttpServletRequest request, HttpServletResponse response) { 
    response.setContentType("text/csv"); 
    PrintWriter writer = response.getWriter(); 
    for (ChartDataEntry chartDataEntry : chartData) { 
     writer.append(chartDataEntry.getDate()).append(','); 
     writer.append(chartDataEntry.getOpen()).append(','); 
     writer.append(chartDataEntry.getHigh()).append(','); 
     writer.append(chartDataEntry.getLow()).append(','); 
     writer.append(chartDataEntry.getClose()).append(','); 
     writer.append(chartDataEntry.getVolume()).println(); 
    } 
} 
+0

非常感謝,我認爲這會起作用,但由於我的架構項目它不是一個有效的解決方案,我會看看trimSpaces設置 – 2010-09-10 09:59:22

+0

我終於改變了一些東西,並以這種方式,非常感謝! – 2010-09-13 10:21:57

0

您提供的應該產生新行的代碼(可能是幾個)。你確定它不是渲染的問題嗎? (即你正在瀏覽器中查看它,並且由於沒有
標記,輸出呈現在一行上?

+0

感謝您的回答!我只檢查了結果在一個瀏覽器中,我會嘗試將它寫入一個文件中,但說實話,我認爲這不是問題,因爲讀取csv文本的應用程序就像一切都是一行一樣。 – 2010-09-10 09:55:11