Hi, See https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/markup/html/link/DownloadLink.java?source=cc#L167 for a simple example.
On Thu, Aug 1, 2013 at 5:33 AM, BrianWilliams <[email protected]>wrote: > Thank you again Paul. I'll look at scheduleRequestHandlerAfterCurrent and > compare it. > > And yes, you are right that IResourceStream is straightforward, but again > I am blown away that something that worked perfectly pre6.x now requires a > different strategy. And no, I am not setting cookies or buffering, just > generating and sending that spreadsheet down. > Cheers. > > > ________________________________ > From: Paul Bors [via Apache Wicket] < > [email protected] > To: BrianWilliams <[email protected]> > Sent: Wednesday, July 31, 2013 4:24 PM > Subject: RE: Generating spreadsheet to send to Client fails in 1.6 > > > > Well... Component.getResponse() calls getRequestCycle().getResponse() and > you're then you're casting that Response object to a WebResponse and change > it in the middle of wicket's processing it. > > Is simple to schedule your resource outside of wicket's normal flow right? > Hence getRequestCycle().scheduleRequestHandlerAfterCurrent() which > schedules the request handler to be executed after the current one works > much better for downloading a resource right? > > If you don't like that explanation look over the JavaDoc of the > WebResponse and its API and compare it with that of the IResourceStream. > > You have to ask yourself, are you going to set any cookies or a buffer > along with your spreadsheet download? :) > > ~ Thank you, > Paul Bors > > > -----Original Message----- > From: BrianWilliams [mailto:[hidden email]] > Sent: Wednesday, July 31, 2013 4:43 PM > To: [hidden email] > Subject: Re: Generating spreadsheet to send to Client fails in 1.6 > > Thank you Paul. I appreciate the advice. Regarding your suggestion to > use IResourceStream, I wonder what the problem is with writing to the web > response? Is this simply something that is no longer supported in 6.x, > even though it worked perfectly in 4.x? > > I'd prefer to simply fix whatever is wrong with my current code > > > ________________________________ > From: Paul Bors [via Apache Wicket] <[hidden email]> > To: BrianWilliams <[hidden email]> > Sent: Wednesday, July 31, 2013 11:40 AM > Subject: RE: Generating spreadsheet to send to Client fails in 1.6 > > > > I think you should also upgrade your Apache POI version and switch to .xlsx > since the older format has a limit of about 65K records. Outside of that I > suggest you use an IResourceStream instead of writing to your web response. > > Personally I use csv comma delimited since I don't do any magic beside > export those records to be viewed in Excel, edited and then imported back > via the webapp. > > In any event this is how I do it via Wicket 6.x: > > @Override > protected void onClick() { > IResourceStream csvStream = new > CsvResourceStream(service.exportAll(getSession().getLocale())); > String fileNameKey = ...; > getRequestCycle().scheduleRequestHandlerAfterCurrent( > new > > ResourceStreamRequestHandler(csvStream).setFileName(ResourceKeyHelper.resour > ceValue(fileNameKey) + ".csv") > ); > } > > public class CsvResourceStream extends AbstractResourceStream { > private static final long serialVersionUID = 1L; > > public CsvResourceStream(ByteArrayOutputStream outputStream) { > super(outputStream.toByteArray()); > IOUtils.closeQuietly(outputStream); > } > > @Override > public String getContentType() { > return new StringBuilder() > .append("text/comma-separated-values, ") > .append("text/csv, ") > .append("application/csv, ") > .append("application/excel") > .toString(); > } > } > > You can switch it to your HSSFWorkbook and grab its byte content. > > -----Original Message----- > From: BrianWilliams [mailto:[hidden email]] > Sent: Wednesday, July 31, 2013 1:14 PM > To: [hidden email] > Subject: Generating spreadsheet to send to Client fails in 1.6 > > Hello, > > I had code in Wicket 1.x that worked perfectly to dynamically generate a > spreadsheet and send it to the user. I had to rewrite it for the new > Response classes in 1.6: > > public void generateExcel(String filename, List<List<? extends > Object>> dataList) { > HSSFWorkbook myWorkBook = new HSSFWorkbook(); > HSSFSheet mySheet = myWorkBook.createSheet(); > ... (generate sheet from dataList using HSSFSheet methods) > WebResponse response = (WebResponse)getResponse(); > webResponse.setContentType("application/vnd.ms-excel"); > webResponse.setAttachmentHeader(filename + ".xls"); > OutputStream out = webResponse.getOutputStream(); > myWorkBook.write(out); > out.close(); > } > > The sheet is still being populated as I need, and the client is asked to > open or save the <filename>.xls file (as expected). > > The problem with 1.6 is: the current page is sent rather than the sheet > I've > built. My .xls viewer complains that the file is not in the correct > format > and, when I display it anyway, contains the original Wicket page, head, > css, > javascript and all. > > The same problems happens when generating xml from the same data list: > > WebResponse response = (WebResponse)getResponse(); > response.setContentType("application/xml"); > response.setAttachmentHeader(filename + ".xml"); > XMLStreamWriter out = > > XMLOutputFactory.newInstance().createXMLStreamWriter(response.getOutputStrea > m()); > > out.writeStartDocument(); > ... (generate XML document from dataList) > out.writeEndDocument(); > out.close(); > > This also sends the original HTML page to the client. > > Both methods worked perfectly before I migrated to Wicket 1.6, but now the > Response (returned by getResponse()) seems to behave differently. Any > ideas? Thank you very much. > > > > -- > View this message in context: > > http://apache-wicket.1842946.n4.nabble.com/Generating-spreadsheet-to-send-to > -Client-fails-in-1-6-tp4660579.html > Sent from the Users forum mailing list archive at Nabble.com. > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [hidden email] > For additional commands, e-mail: [hidden email] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [hidden email] > For additional commands, e-mail: [hidden email] > > > ~ Thank you, > [hidden email] > > > > ________________________________ > > If you reply to this email, your message will be added to the discussion > below: > http://apache-wicket.1842946.n4.nabble.com/Generating-spreadsheet-to-send-to-Client-fails-in-1-6-tp4660579p4660582.html > > To unsubscribe from Generating spreadsheet to send to Client fails in 1.6, > click here. > NAML > > > > -- > View this message in context: > http://apache-wicket.1842946.n4.nabble.com/Generating-spreadsheet-to-send-to-Client-fails-in-1-6-tp4660579p4660594.html > Sent from the Users forum mailing list archive at Nabble.com. > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [hidden email] > For additional commands, e-mail: [hidden email] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [hidden email] > For additional commands, e-mail: [hidden email] > > > ~ Thank you, > [email protected] > > > > ________________________________ > > If you reply to this email, your message will be added to the discussion > below: > http://apache-wicket.1842946.n4.nabble.com/Generating-spreadsheet-to-send-to-Client-fails-in-1-6-tp4660579p4660599.html > To unsubscribe from Generating spreadsheet to send to Client fails in 1.6, > click here. > NAML > > > > -- > View this message in context: > http://apache-wicket.1842946.n4.nabble.com/Generating-spreadsheet-to-send-to-Client-fails-in-1-6-tp4660579p4660602.html > Sent from the Users forum mailing list archive at Nabble.com. > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
