[Wicket-ja-user 561] Re: 動的に作ったPDFを表示させたい

Back to archive index

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
>
>




Wicket-ja-user メーリングリストの案内
Back to archive index