2011-05-27 11 views
1

seamを使用して既存のWebアプリケーションに 'エクスポート'機能を追加する必要があります。目的は、検索結果をCSVファイルにエクスポートすることです。私はcsvを生成するのに問題はありませんが、どのようにcsvをユーザに送り返すのか分かりません。 サーバ上にcsvを格納する必要はありません。なぜなら、それは、ストレージスペースが腰掛けられるからです。 jbossの継ぎ目でどうしたらいいですか?いくつかの方法がありますjboss seamでファイルを生成してダウンロードする

答えて

5

Seamが提供するDocument Store Servletを使用してください。ほとんどの参照ドキュメントからコピー&ペースト

、このようなweb.xmlでサーブレットを宣言する:

<servlet> 
    <servlet-name>Document Store Servlet</servlet-name> 
    <servlet-class>org.jboss.seam.document.DocumentStoreServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Document Store Servlet</servlet-name> 
    <url-pattern>/seam/docstore/*</url-pattern> 
</servlet-mapping> 

のみ<s:resource>タグとexport.xhtmlファイルを作成します。ダウンロードするためのリンクを生成します

<s:resource xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:s="http://jboss.com/products/seam/taglib" 
      data="#{myComponent.csvData}" 
      contentType="application/vnd.ms-excel" 
      fileName="#{myComponent.csvFileName}"/> 

をあなたのページのファイル:<s:download>

<s:download src="/csv/export.xhtml"> 
    <h:outputText value="Download CSV"/> 
    <f:param name="param1" value="somevalue"/> 
    <f:param name="param2" value="someOtherValue"/> 
</s:download> 
(あなたが propagation=noneを設定していない場合) <s:download>が会話を伝播することを

// could be byte[], File or InputStream 
public InputStream getCsvData() { 
    // generate data to be downloaded 
} 

public String getCsvFileName() { 
    return "myfile.csv"; 
} 

注:10

最後に、あなたのコンポーネントでgetCsvData()getCsvFileName()メソッドを実装します。おそらくあなたは会話のコンテキストを伝播する場合は、パラメータを渡す必要はありません。大規模なデータセットの場合、会話を伝播せず、リクエストスコープのコンポーネント内のデータを選択するためにパラメータを渡すのが望ましい場合があります。

+0

あなたはステファノ! – jakob

+0

私はこれを行っています(パラメータは一切渡していません)。ダウンロードリンクがレンダリングされますが、クリックするとアプリケーションはファイルをダウンロードするだけでなく新しいページに移動し、getCsvDataメソッドを新しいインスタンスで実行します。クラス(既存のページを裏付けているものと同じものではない)がすべてnullになるようにします。どんな考え? – tad604

0

1)プログラムであなたのファイルを生成して、CSVに設定されたMIMEタイプを使用してそれを書き出すようSeam-Excelを使用して情報のためのシームのドキュメントを確認してください - これはすべての詳細ですドキュメント内にあります。

しかしSeamの最新バージョンではこれを動作させることができませんでした。これは以前はSeamコンテキストから利用可能でしたが、現在はnullのみを返すレスポンスオブジェクトが必要です。

2)Excel xhtmlテンプレート(Seamのドキュメントとサンプルプロジェクトを参照)として必要なCSVファイルをコーディングし、単純にタグを使用して通常のようにレンダリングします。

私はこれを定期的に行いますが、正常に動作します。ファイル名を指定できないという制限があります。

HTH。

関連する問題