you yamamoto
youy7****@gmail*****
2011年 8月 25日 (木) 15:39:31 JST
金谷さん。 山本です。早速のお返事ありがとうございます。 例外の理由はなんとな〜くわかりました。 が、どこをどうしたらよいのかわからなくて困っていますが。。。 金谷さんが書かれた方法でやってみたこともあるのですが、 それだとページ遷移ではなくダウンロードのダイアログがでません? ダイアログを出さないで、ページとしてPDFを表示したいのです。(印刷のために。) 以上、よろしくお願いします。 2011年8月25日15:16 Atsushi Kanaya <todoa****@gmail*****>: > 山本さん > > 金谷です。 > リダイレクト先を出力するレスポンスを出力完了しているにも関わらず > 更に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 mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user > -------------- next part -------------- HTMLの添付ファイルを保管しました... Download