Atsushi Kanaya
todoa****@gmail*****
2011年 8月 25日 (木) 15:16:07 JST
山本さん 金谷です。 リダイレクト先を出力するレスポンスを出力完了しているにも関わらず 更にPDFも出力しようとしているためエラーが出ているのかと思います。 私の手元の実装ではこんな感じのことをやっていました。 ご参考になれば幸いです。 getRequestCycle().setRedirect(true); getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(new AbstractResourceStreamWriter() { public String getContentType() { return "application/pdf"; } public void write(OutputStream out) { //ダウンロード処理 } }, "hoge.pdf")); 以上、よろしくお願いします。 2011年8月25日14:29 you yamamoto <youy7****@gmail*****>: > はじめまして。山本と申します。 > > 動的に作ったPDFをダウンロードではなく、表示させたいのですが、 > なかなかうまくいかないので、質問させてください。 > > ここのメーリングリストの過去の投稿を参考にして、 > 以下のようにつくってみたら、PDFを表示することはできたのですが、 > なんか例外が発生してしまっているので、困っています。 > 例外を回避する方法をご存知な方がいらっしゃればおしえてください。 > また、以下の方法よりもいい方法があれば、ご教授くださればとおもいます。 > > Page.html抜粋 > ------------------------------------ > > <input type="submit" wicket:id="printLink" value="PDF" /> > > ------------------------------------ > > Page.java抜粋(コンストラクタの部分) > ------------------------------------ > > Button printLink = new Button("printLink"){ > private static final long serialVersionUID = 1L; > @Override > public void onSubmit() { > //動的に作ったPDFがaiueo.pdfというファイル名だとします。 > IResourceStream stream = new FileResourceStream(new > File("aiueo.pdf")); > // responseを取得 > WebResponse response = (WebResponse) getResponse(); > // ヘッダー設定 > response.setContentType("application/pdf"); > response.setHeader("Content-Disposition", "inline"); > // responseのOutputStreamにPDFのStreamをセット > try { > OutputStream os = response.getOutputStream(); > InputStream in = stream.getInputStream(); > int iData = 0; > while ((iData = in.read()) != -1) { > os.write(iData); > } > os.close(); > in.close(); > }catch (Exception e) { > throw new RuntimeException(e); > } > //responseをセット > setHeaders(response); > } > }; > form1.add(printLink); > this.add(form1); > > ------------------------------------ > > 発生する例外 > ------------------------------------ > org.apache.wicket.protocol.http.WebResponse redirect > 致命的: Unable to redirect to: ?wicket:interface=:6::::, HTTP Response has > already been committed. > org.apache.wicket.protocol.http.WicketFilter doGet > 致命的: closing the buffer error > java.lang.IllegalStateException > at > org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:473) > at > org.apache.wicket.protocol.http.WebResponse.sendRedirect(WebResponse.java:299) > at > org.apache.wicket.protocol.http.WebResponse.redirect(WebResponse.java:250) > at > org.apache.wicket.protocol.http.BufferedWebResponse.close(BufferedWebResponse.java:67) > ------------------------------------ > > 環境 > ------------------------------------ > tomcat7 > JDK 1.6 > Wicket 1.4.18 > ------------------------------------ > > 以上、よろしくお願いします。 > > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user > >