0

サーバーサイドのJavaScriptを使用してExcelファイルを作成するXPageがあります(Russ Maherに感謝します)。XPageをブラウザでローカルに実行している場合、C:ドライブに保存する方法は知っていますが、サーバーで実行しているときに、最初にサーバーに保存せずにユーザーのマシンに保存する方法がわかりません。次のコードは、サーバーの観点から保存するために使用されます。

var fileOut = new java.io.FileOutputStream(directory+fileName);
xl.write(fileOut);
fileOut.close();

それをユーザーのドライブに向ける方法はありますか?

4

2 に答える 2

1

ExcelブックをFileOutputStreamに書き込む代わりに、ByteArrayOutputStreamに書き込む必要があります。

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
xl.write(outputStream);

おそらく、XAgentを使用して出力を作成し、XPageからXAgentにリンクする必要があります。おそらく、デクラン・リンチによるこのブログエントリと、サーブレットでそれを行う方法に関するこの回答を組み合わせると、正しい方向に導くことができます。

于 2012-08-01T20:49:26.873 に答える
0

Paul Calhounから、必要なスプレッドシートを作成するためにマッサージしたサンプルコードが送られてきました。彼が何をしたのかはわかりませんが、今のところ、これがソリューションの核心であり、FileOutputStreamまたはByteArrayOutputStreamの代わりにOutputStreamを利用しているだけだと思います。

// The Faces Context global object provides access to the servlet environment via the external content
var extCont = facesContext.getExternalContext(); 
// The servlet's response object provides control to the response object
var pageResponse = extCont.getResponse();
//Get the output stream to stream binary data
var pageOutput = pageResponse.getOutputStream();

// Set the content type and headers
pageResponse.setContentType("application/x-ms-excel");
pageResponse.setHeader("Cache-Control", "no-cache");
pageResponse.setHeader("Content-Disposition","inline; filename=" + fileName);
//Write the output, flush the buffer and close the stream
wb.write(pageOutput);
pageOutput.flush();
pageOutput.close();

//  Terminate the request processing lifecycle.
facesContext.responseComplete();

他の誰かがこの問題に遭遇した場合、私は喜んで助けを提供します、そしてうまくいけば、誰かが尋ねる時までに、私は何がうまくいったのかをもっと理解するでしょう....

于 2012-09-13T20:59:52.993 に答える