- - PR -
JSFでのダウンロードについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-03-20 11:20
こんにちは。
JSFでExcelのダウンロード後の画面遷移で悩んでおります。 ダウンロード自体は正しく行われるのですが、その後、 画面上のアンカー(処理選択へ戻る)をクリックしても、1回は必ず 同じ画面を再表示します。2回目のクリックで、正しい遷移を行います。 ちなみに、ダウンロードを行う前は、1回目のクリックで正しい遷移を行います。 ダウンロード後も、1回目のクリックで正しく画面遷移させる為には、 どのようにすれば宜しいのでしょうか? 環境:Java 1.4.2_08、Tomcat 5.0.28、MyFaces 1.0.9(FacesIDE 0.1.7) <<aki180d05.jsp 抜粋>> <h:commandButton type="submit" value="ダウンロード" id="downloadBtn" action="#{aki180Bean.downloadAction}"/> <h:commandLink value="処理選択へ戻る" action="submenu" immediate="true"/> <<faces-config.xml>> <navigation-rule> <from-view-id>/jsp/ak/aki180d05.jsp</from-view-id> <!-- aki180 to submenu --> <navigation-case> <from-outcome>submenu</from-outcome> <to-view-id>/jsp/ak/aki180d01.jsp</to-view-id> </navigation-case> </navigation-rule> <<java>> public String downloadAction() throws Exception { FacesContext facescontext = FacesContext.getCurrentInstance(); ExternalContext externalcontext = facescontext.getExternalContext(); HttpServletResponse response = (HttpServletResponse)externalcontext.getResponse(); String outFileName = ""; try { //ダウンロードファイル作成 outFileName = createOutputFile(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\\\\\\\\"AAA.xls\\\\\\\\""); BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream()); BufferedInputStream input = new BufferedInputStream(new FileInputStream(outFileName)); byte buf[] = new byte[1024]; int len; while ((len = input.read(buf)) != -1) { output.write(buf, 0, len); } output.flush(); output.close(); input.close(); //ダウンロードファイル削除 File file = new File(outFileName); if (file.delete() == false) { //エラーログ出力 } facescontext.responseComplete(); return ""; } catch (Exception e) { e.printStackTrace(); throw e; } } |
|
投稿日時: 2006-03-20 15:32
Tomcat 4.1.24, JSF RI 1.1_01で試してみましたが,再現しません.ちゃんと動作します.
とりあえず,PhaseListenerを入れて,どのフェーズが動いているかログを採ってみては いかがでしょうか? それと <h:messages layout="table"/> や <h:outputText value="#{param}"/> を入れておくと,何が起きているか分かることがあります. |
1