Pass the info as parameters on the request to the mounted resource? On Fri, Mar 13, 2015 at 7:15 PM, Bruce Lombardi <brlom...@gmail.com> wrote:
> Martin, > > I'm looking into mounting the resource but there is something that I don't > understand. > Currently I am creating the resource in my panel and passing the pdf I > want to display into the constructor of the resource. If I mount the > resource, how do I provide it with the dynamically generated pdf? I don't > even see a way of getting a hold of the resourceReference object created > and mounted in the WebApplication init() method. Perhaps I need to also > register it as an application-shared resource, then access it in my panel > constructor and add the pdf there? > > Bruce > > -----Original Message----- > From: Martin Grigorov [mailto:mgrigo...@apache.org] > Sent: Friday, March 13, 2015 12:53 PM > To: users@wicket.apache.org > Subject: Re: PDF viewed in panel via ResourceReference works in 6.12 but > not in 6.13 > > Hi, > > I think I see what happens. > The ResRef is created as a local variable to create the url and then > discarded. > Wicket has something called ResourceReferenceRegistry. When a ResRef is > used to create an url to it it is automatically registered in the registry. > It seems after 6.13 there is no such auto-registration for your ResRef for > some reason. > You should have some WARNs in the logs. > > I see nothing component specific in your ResRef so I'd #mountResource() it. > This way it will be always available. > > > Martin Grigorov > Freelancer, available for hire! > Wicket Training and Consulting > https://twitter.com/mtgrigorov > > On Fri, Mar 13, 2015 at 6:40 PM, Bruce Lombardi <brlom...@gmail.com> > wrote: > > > I have a PdfViewer page that contains a panel that displays a > > dynamically generated PDF using a resource reference. This works fine > > in Wicket 6.12.0, but when I upgrade to 6.13.0 it stops working (just > > changed Maven dependency > > - no code changes). No errors are displayed and the html is generated > > exactly as it is with 6.12, but the pdf does not show up in the page. > > > > By setting a breakpoint in Eclipse I have determined that code in the > > resource that produces the response (newResourceResponse) is never > > called in 6.13. After migrating to the latest version (6.19) I still > > get the problem. > > I've looked at the release notes for version 6.13 and see some changes > > related to IResource but nothing that looks related to this problem. > > > > I'm hoping someone has seen something similar. Here is some of the > > relevant > > code: > > > > PdfViewer .html - just has reference to panel > > > > <div wicket:id="pdfPanel"></div> > > > > > > > > PdfPane.html - just has object reference > > > > Raw HTML > > > > <object wicket:id="pdf" data="" border="1" width="80%" > > height="80%"></object> > > > > > > > > Generated HTML - seen with view source in browser > > > > <object > data="./resource/org.apache.wicket.Application/pdfProducer" > > > > border="1" width="80%" height="80%"></object> > > > > > > > > PdfPanel.java - has setup for resource reference > > > > public class PdfPanel extends Panel { > > > > > > > > private static final long serialVersionUID = 1L; > > > > > > > > public PdfPanel(String id) { > > > > super(id); > > > > > > > > ResourceReference resourceReference = new > > ResourceReference( > > > > "pdfProducer") { > > > > private static final long serialVersionUID = 1L; > > > > > > > > @Override > > > > public IResource getResource() { > > > > WebDocsSession session = > > (WebDocsSession)getSession(); > > > > > > > > final byte[] pdf = session.getPdf(); > > > > > > > > if(pdf == null) > > > > System.out.println("PdfPanel session.getPdf returned null"); > > > > > > > > PdfResourceProducer pdfResourceProducer = > > > > new PdfResourceProducer(pdf); > > > > > > > > return pdfResourceProducer; > > > > } > > > > }; > > > > > > > > String url = > > (String)RequestCycle.get().urlFor(resourceReference, > > null); > > > > > > > > MarkupContainer wmc = new WebMarkupContainer("pdf"); > > > > wmc.add(new AttributeModifier("data", url)); > > > > add(wmc); > > > > } > > > > > > > > PdfProducer.java - implements the Resource > > > > public class PdfResourceProducer extends > > AbstractResource { > > > > > > > > private static final long serialVersionUID = > > -2245331056747467763L; > > > > final byte[] pdfByteArray; > > > > > > > > > > > > public PdfResourceProducer(byte[] pdfByteArray) { > > > > super(); > > > > this.pdfByteArray = pdfByteArray; > > > > if(pdfByteArray == null) { > > > > System.out.println("PdfResourceProducer > > constructor called with > > > > null byte array."); > > > > } > > > > } > > > > > > > > @Override > > > > protected ResourceResponse newResourceResponse(Attributes > > attributes) > > { > > > > ResourceResponse resourceResponse = new > > ResourceResponse(); > > > > resourceResponse.setContentType("application/pdf"); > > > > // resourceResponse.setTextEncoding("utf-8"); > > > > > > > > > > resourceResponse.setContentLength((int)pdfByteArray.length); > > > > > > > > resourceResponse.disableCaching(); //do not allow > > resource to be cached. > > > > > > > > resourceResponse.setWriteCallback(new WriteCallback() { > > > > @Override > > > > public void writeData(Attributes attributes) > > throws IOException { > > > > try { > > > > OutputStream outputStream = > > attributes.getResponse() > > > > .getOutputStream(); > > > > outputStream.write(pdfByteArray); > > > > outputStream.flush(); > > > > } catch (IOException e) { > > > > throw new WicketRuntimeException( > > > > "Problems writing pdf > > to response..."); > > > > } > > > > } > > > > }); > > > > > > > > return resourceResponse; > > > > } > > > > > > > > Bruce > > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > > -- Regards - Ernesto Reinaldo Barreiro