2011-12-29 39 views
0

私はユーザーの投稿に基づいてすべての項目を表示するjsp(itemSearch.jsp)を持っています。ユーザーは、私がJavaアプリケーションでCSVファイルにデータを書き込む方法

submitItems = itemManager.getProcessedItems(1, itemID, startPage, endPage, fromDate, toDate); 

下に示すように、すべてのパラメータを提出するJavaメソッドを呼び出していますここgetProcessedItemsで私はJDBC接続を使用してデータをフェッチしています

public ArrayList getProcessedItems(1, itemID, startPage, endPage, fromDate, toDate) { 
ArrayList p_items=new ArrayList(); 
Connection connection = null; 
String sqlStatement = null; 

try { 
      connection = DBManager.getConnection(DBManager.EPM_DATASOURCE_NAME); 
      if(set==1) { 

       sqlStatement = "SELECT I.lineid, I.date,S.STATUS, S.DATETIME, "; 
       sqlStatement += "S.TOTAL FROM ITEM I, LITEM LI, ITEM_STATUS S "; 
       sqlStatement += "WHERE I.LINEID=LI.ID AND I.ITEMID=? "; 

       if (fromDate !=null && toDate!=null){ 
        SimpleDateFormat fd = new SimpleDateFormat("MM/dd/yyyy"); 
        String fromdateString = fd.format(fromDate); 
        String todateString = fd.format(toDate); 
        sqlStatement += " AND I.PDATE BETWEEN RANGE_DATE('" + fd.format(fromDate) + "','MM/DD/YYYY') AND RANGE_DATE('" + fd.format(toDate) + "','MM/DD/YYYY')"; 

       }   
       sqlStatement += "ORDER BY I.PDATE DESC"; 
      } 

      PreparedStatement ps = connection.prepareStatement(paginationBegin+sqlStatement+paginationEnd); 
      ps.setInt(1, ID); 
      ResultSet rs = ps.executeQuery(); 
      while(rs.next()) { 
       if(items.contains(new Integer(rs.getInt("itemid")))==false) { 
       items.add(new Integer(rs.getInt("itemid"))); 
       ReportItem ri = new ReportItem(); 
       ri.setLineItemID(rs.getInt("lineid")); 
       ri.setTransmitted(rs.getTimestamp("idate")); 
       ri.setStatus(rs.getString("status")); 
       ri.setStatusDateTime(rs.getTimestamp("s_datetime")); 
       p_items.add(ri); 
       } 
       } 
      rs.close(); 
      ps.close(); 
     } catch (SQLException e) { 
      log("ERROR"); 
     } catch (NamingException e) { 
      log("ERROR"); 
     } finally { 
      DBManager.closeConnection(connection); 
     } 

     return p_items; 
} 

を提出したら、これは正しく今itemSearch.jspにデータが表示されますがダウンロードしたいファイルに表示されたデータを含むCSVファイル(jspのハイパーリンク)を追加します。

すなわち

<div align="right" class="TableRows" style="padding-right:10px"><a href="" class="TableRowLinks">CSV File</a></div> 

質問 1.どのように照会結果からCSVファイルを生成するには? 2. jspファイルで同じものをリンクする方法は?

答えて

4

あなたは、なぜあなたはJSPファイルに書きたいんSuperCSV

を使用することができますか? サーブレットを使用するには、拡張子が.csvのファイルを作成し、応答を書き込んでください。

コードサンプル:CSVへの部分的なオブジェクトを書き込む

class Order { 
    Integer orderNumber; 
    Integer parentOrder; 
    Integer productNumber; 
    String userComment; 

    public Integer getOrderNumber() { 
     return orderNumber; 
    } 
    public void setOrderNumber(int orderNumber) { 
     this.orderNumber = orderNumber; 
    } 
    public Integer getParentOrder() { 
     return parentOrder; 
    } 
    public void setParentOrder(int parentOrder) { 
     this.parentOrder = parentOrder; 
    } 
    public Integer getProductNumber() { 
     return productNumber; 
    } 
    public void setProductNumber(int productNumber) { 
     this.productNumber = productNumber; 
    } 
    public String getUserComment() { 
     return userComment; 
    } 
    public void setUserComment(String userComment) { 
     this.userComment = userComment; 
    } 
} 

<a href="CsvServlet" class="TableRowLinks">CSV File</a> 

レッツ以下のようにCSVを生成することができますサーブレットへのリンクを提供

public void should_partial_write() throws Exception { 
    // The data to write 
    Order mainOrder = new Order(); 
    mainOrder.setOrderNumber(1); 
    mainOrder.setProductNumber(42); 
    mainOrder.setUserComment("some comment"); 
    Order subOorder = new Order(); 
    subOorder.setOrderNumber(2); 
    subOorder.setParentOrder(1); 
    subOorder.setProductNumber(43); 

    // for testing write to a string rather than a file 
    StringWriter outFile = new StringWriter(); 

    // setup header for the file and processors. Notice the match between the header and the attributes of the 
    // objects to write. The rules are that 
    // - if optional "parent orders" are absent, write -1 
    // - and optional user comments absent are written as "" 
    String[] header = new String[] { "orderNumber", "parentOrder", "productNumber", "userComment" }; 
    CellProcessor[] Processing = new CellProcessor[] { null, new ConvertNullTo(-1), null, new ConvertNullTo("\"\"") }; 

    // write the partial data 
    CsvBeanWriter writer = new CsvBeanWriter(outFile, CsvPreference.EXCEL_PREFERENCE); 
    writer.writeHeader(header); 
    writer.write(mainOrder, header, Processing); 
    writer.write(subOorder, header, Processing); 
    writer.close(); 

    // show output 
    System.out.println(outFile.toString()); 
} 
+0

私はデータの生成/書き込みが可能なソリューションを探しています私のJDBCクエリの直後に、私はpojoの作成と結果セットの保存を避けることができます。 –

3

を提出サーブレットはCSVのMIMEタイプをtext/comma-separated-values or text/csvと設定しました。オープンソースライブラリCSV API for Javaを使用してCSVファイルを作成します。 JSPで

サンプルコード

public class CsvServlet extends HttpServlet 
{ 
    public void doPost(HttpServletRequest req, HttpServletResponse res) 
         throws ServletException, IOException 
    { 
      res.setContentType("text/csv"); 
      res.setHeader("Cache-Control", "public"); 
      res.setHeader("Pragma", "public"); 
      res.setHeader("Content-Disposition", "attachment; filename= \"test.csv"+ "\""); 

      //create csv out of data from db and stream it to res.getOutputStream() 
    } 
} 
+0

申し訳ありませんが、私はこれを使用する方法がわかりません。もっと正確になりますか? –

+0

@ Mad-Dバイナリコンテンツの生成にはサーブレットを使用する必要があります。そこでサーブレット(hrefを通して)を呼び出すことをお勧めしました。それはCSVファイルを生成してサーブレット出力ストリームに書き込むことになります –

+0

これは私がしたことです。 'CSV File'はこのようにパラメータを渡します。しかし、 'doPost'リクエストでこれをどうやって調べることができないのかよくわかりません。私は 'request.getAttribute(" reportItems ")'と 'request.getParameter(" reportItems ")'を試しました。何が間違っているのですか? –

1

、クリックするとCSVDowlaodを呼び出す前に。私は、CSVファイルのリンク

<div align="right" class="TableRows" style="padding-right:10px"><a href="/CSVDownlaod.epm?typeParam=<%=typeParam%>&idParam=<%=idParam%>&startPage=<%=startPage%>&endPage=<%=endPage%>&fromDate=<%=fDate%>&toDate=<%=tDate%>" class="TableRowLinks">CSV File</a></div> 

インサイドCSVDownlaod.epmにJSPからパラメータを送信する

typeParam = 1; 
idParam = itemID; 
startPage= startPage; 
endPage= endPage; 
fromDate= fromDate; 
toDate = toDate; 

としてデータを保存している、私は2つのステップを行っています。 1 JSPからの要求をRecevingと

int typeParam = Integer.parseInt(request.getParameter("typeParam")); 
String fDate = request.getParameter("fromDate").trim(); 

reportData = Manager.getProcessedItems(1, itemID, startPage, endPage, fromDate, toDate); 
  1. Need to define before try-catch 
    String fileName = name.csv 
    String filePath = directory path 
    
    try {     
         CSVWriter writer = new CSVWriter(filePath); 
         writer.setQuoteMode(CSVWriter.DQUOTE_CONDITIONAL); 
         writer.setHeader(newHeader); 
         writer.write(data); 
         file_written = true; 
         data = null; 
         HashMap model = new HashMap(); 
         model.put("fileName", fileName); 
         model.put("filePath", filePath); 
         model.put("delete_after", new Boolean(true)); 
         model.put("content_type", "application/vnd.ms-excel");    
         return new ModelAndView("fileView", model); 
        } catch (IOException io) { 
         System.out.println("ERROR :" + io.toString()); 
        } 
    
    CSV

    のベクトルデータに

  2. 書き込みデータを格納するデータを&ループ(例えば)データを取得するためにgetProcessedItemsメソッドへのパラメータの受け渡し

関連する問題