Ok, below the code I use to create a link that allows to download pdf file created by jasper on runtime. Hope it helps. Do not hesitate to ask questions.
public class PdfGenerateLink extends ResourceLink<Void> { public PdfGenerateLink(final String id, final IModel<Bid> model, final PdfBuilderFromBidCreator creator) { super(id, new WebResource() { @Override public IResourceStream getResourceStream() { IResourceStream resourceStream = new AbstractResourceStreamWriter() { public void write(OutputStream output) { try { generate(output, model.getObject()); } catch (Exception e) { throw new RuntimeException(e); } } private void generate(OutputStream output, Bid bid) throws Exception { PdfOfertaDocumentBuilder pdf = creator.create(bid); InputStream generate = pdf.generate(); byte[] buffer = new byte[1024]; while (generate.read(buffer) != -1) { output.write(buffer); } generate.close(); } public String getContentType() { return "application/pdf"; } }; return resourceStream; } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setCharacterEncoding("UFT-8"); response.setHeader("Expires", "0"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); response.setHeader("Pragma", "public"); response.setAttachmentHeader(model.getObject().getPublicTask().getName().replace(" ", "_") + ".pdf"); } }); add(createImage("icon", "pdficon16.png")); } } On Tue, Oct 18, 2011 at 8:43 PM, Jim Pinkham <pinkh...@gmail.com> wrote: > Paul, > > I am doing something very similar - I'd be interested to know more about > how you got this working - here is what I've got that works for now, but I'm > not real happy with it: > > In my report forms, I have buttons like this: (details about params > omitted - nothing fancy there) > > add(new MyReportResourceButton("pdf", new > ReportResource("MyReport", new PdfResourceHandler()), paramsModel)); > add(new MyReportResourceButton("xls", new > ReportResource("MyReport", new XlsResourceHandler()), paramsModel)); > > (So it will load MyReport.jasper that was compiled and put into resources > folder by maven plugin during build) > > MyReportResourceButton has this: > @Override > public final void onResourceRequested() { > Map<String,Object> params = paramsModel.getObject(); > resource.setReportParameters(params); > super.onResourceRequested(); > } > > and it's superclass MyResourceButton has this: > @Override > public void onSubmit() { > onResourceRequested(); > } > > /** > * @see org.apache.wicket.IResourceListener#onResourceRequested() > */ > public void onResourceRequested() > { > Attributes a = new Attributes(RequestCycle.get().getRequest(), > RequestCycle.get() > .getResponse(), null); > resource.respond(a); > } > > > At runtime, it basically works, however, it gives me this annoying message > in my logs multiple times per report request after the report has been > served and it appears to be trying to just stay on the same page: > > 2011-10-13 15:22:42,381 [http-80-12] ERROR > org.apache.wicket.DefaultExceptionMapper - Unexpected error occurred > java.lang.IllegalStateException: Header was already written to response! > at > org.apache.wicket.protocol.http.HeaderBufferingWebResponse.checkHeader(HeaderBufferingWebResponse.java:64) > at > org.apache.wicket.protocol.http.HeaderBufferingWebResponse.sendRedirect(HeaderBufferingWebResponse.java:112) > at > org.apache.wicket.request.handler.render.WebPageRenderer.redirectTo(WebPageRenderer.java:136) > at > org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:261) > at > org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:139) > at > org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:717) > at > org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:63) > at > org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:96) > at > org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212) > at > org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:253) > at > org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:160) > at > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:216) > > Could you tell me if there is some way this differs from how you (or your > contractor) are doing it? > > Thanks, > -- Jim. > > On Tue, Oct 18, 2011 at 3:58 AM, Paul Szulc <paul.sz...@gmail.com> wrote: > >> yeah, ok, my bad >> >> resources where under src/main/resource not src/main/resource*s* >> * >> * >> thx Tor >> > > -- Best regards, Paul Szulc http://www.paulszulc.com