Re: Adding to response header (filename)?
I've changed it to that below, but still get 18:22:47,185 ERROR WebResponse:190 - Unable to redirect to: ?wicket:interface=:2, HTTP Response has already been committed. in the logs. Isn't this the same as what's in the link you posted? I can post all the code, but all it is is a Link inside a Form. The code before what I've posted below simple appends text to the out, which is a StringBuilder. This is the only part where I send the request. I'm using 1.3 Wicket, and Apache Tomcat 6, if that helps. SimpleDateFormat formatFile = new SimpleDateFormat(MM-dd-); ResourceStreamRequestTarget rsrt = new ResourceStreamRequestTarget(new StringResourceStream(out, text/csv)); rsrt.setFileName(export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv); getRequestCycle().setRequestTarget(rsrt); Jan Kriesten wrote: hi, see here: http://www.nabble.com/Download-link-from-DynamicWebResource--tf4353363.html#a12404601 regards, --- jan. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- Justin Stanczak Stanczak Group 812-735-3600 All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Adding to response header (filename)?
Well, I still don't see a way to get around this error. I'll have to live with it for now until I can look into it deeper. Has anyone else had this error? Stanczak Group wrote: Instead of setRequestTarget(rsrt) I use this rsrt.respond(getRequestCycle());, is that correct? It does work, but I get this in the logs 08:53:03,277 ERROR WebResponse:190 - Unable to redirect to: ?wicket:interface=:2, HTTP Response has already been committed.. It works, but I wouldn't mind fixing that error, just to keep things clean. Johan Compagner wrote: or something like this: new Link() { onclick() { CharSequence discounts = DataBase.getInstance() .exportDiscounts(); ResourceStreamRequestTarget rsrt = new ResourceStreamRequestTarget(new StringResourceStream(discounts, text/csv)); rsrt.setFileName(name); setRequestTarget(rsrt) } } Maybe we should give ResourceStreanRequestTarget 1 extra constructor with the file name.. setRequestTarget(new ResourceStreamRequestTarget(new StringResourceStream(discounts, text/csv,name))) On 10/5/07, Eelco Hillenius [EMAIL PROTECTED] wrote: On 10/5/07, Eelco Hillenius [EMAIL PROTECTED] wrote: What do you use for the export? You probably should use a resource. For instance: public class DiscountsExport extends WebResource { public static class Initializer implements IInitializer { public void init(Application application) { SharedResources res = application.getSharedResources(); res.add(discounts, new DiscountsExport()); } } public DiscountsExport() { setCacheable(false); } @Override public IResourceStream getResourceStream() { CharSequence discounts = DataBase.getInstance().exportDiscounts(); return new StringResourceStream(discounts, text/plain); } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(discounts.csv); } } Sorry, this might be easier to understand: WebResource export = new WebResource() { @Override public IResourceStream getResourceStream() { CharSequence discounts = DataBase.getInstance() .exportDiscounts(); return new StringResourceStream(discounts, text/csv); } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(discounts.csv); } }; export.setCacheable(false); add(new ResourceLink(exportLink, export)); Eelco - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- Justin Stanczak Stanczak Group 812-735-3600 All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Adding to response header (filename)?
On 10/6/07, Stanczak Group [EMAIL PROTECTED] wrote: What do you mean? This is all I'm doing, but still get the HTTP Response has already been committed. error. Is there something there that wrong? SimpleDateFormat formatFile = new SimpleDateFormat(MM-dd--HH-MM); ResourceStreamRequestTarget rsrt = new ResourceStreamRequestTarget(new StringResourceStream(out, text/csv)); rsrt.setFileName(export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv); rsrt.respond(getRequestCycle()); This last line, rsrt.respond is what you shouldn't do. Eelco - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Yanıt: Re: Adding to response header (filename)?
That's what I used to use, but it gives the same error. Do you not get the error in the logs. The error doesn't stop it from working, but I still would like to do it correctly according to Wicket. Ramazan Pekin wrote: I dont know the subject, I didnt follow up, but this code is working. downloadLink = new Link(downloadFile){ private static final long serialVersionUID = 1L; public void onClick(){ String tableCode = sourceCode; BufferedInputStream bis = null; BufferedOutputStream bos = null; try { String ContentType = text; getResponse().setContentType(ContentType); ((WebResponse)getResponse()).setHeader(Content-Disposition,inline; filename=\+fileName+.java\); ByteArrayInputStream bais = new ByteArrayInputStream(tableCode.getBytes()); bis = new BufferedInputStream(bais); bos=new BufferedOutputStream(getResponse().getOutputStream()); byte[] buff=new byte[2048]; int bytesread; while((bytesread=bis.read(buff,0,buff.length)) != -1) { bos.write(buff,0,bytesread); } bos.flush(); } catch (Exception e) { e.printStackTrace(); } finally{ try { bos.close();bos=null; bis.close();bis=null; } catch (Exception e) { } } } }; Eelco Hillenius [EMAIL PROTECTED] wrote: On 10/6/07, Stanczak Group wrote: Well, I still don't see a way to get around this error. I'll have to live with it for now until I can look into it deeper. Has anyone else had this error? But you shouldn't call respond yourself. That's for Wicket to do. The only thing you should do is the the request target on the request cycle. Eelco Stanczak Group wrote: Instead of setRequestTarget(rsrt) I use this rsrt.respond(getRequestCycle());, is that correct? It does work, but I get this in the logs 08:53:03,277 ERROR WebResponse:190 - Unable to redirect to: ?wicket:interface=:2, HTTP Response has already been committed.. It works, but I wouldn't mind fixing that error, just to keep things clean. Johan Compagner wrote: or something like this: new Link() { onclick() { CharSequence discounts = DataBase.getInstance() .exportDiscounts(); ResourceStreamRequestTarget rsrt = new ResourceStreamRequestTarget(new StringResourceStream(discounts, text/csv)); rsrt.setFileName(name); setRequestTarget(rsrt) } } Maybe we should give ResourceStreanRequestTarget 1 extra constructor with the file name.. setRequestTarget(new ResourceStreamRequestTarget(new StringResourceStream(discounts, text/csv,name))) On 10/5/07, Eelco Hillenius wrote: On 10/5/07, Eelco Hillenius wrote: What do you use for the export? You probably should use a resource. For instance: public class DiscountsExport extends WebResource { public static class Initializer implements IInitializer { public void init(Application application) { SharedResources res = application.getSharedResources(); res.add(discounts, new DiscountsExport()); } } public DiscountsExport() { setCacheable(false); } @Override public IResourceStream getResourceStream() { CharSequence discounts = DataBase.getInstance().exportDiscounts(); return new StringResourceStream(discounts, text/plain); } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(discounts.csv); } } Sorry, this might be easier to understand: WebResource export = new WebResource() { @Override public IResourceStream getResourceStream() { CharSequence discounts = DataBase.getInstance() .exportDiscounts(); return new StringResourceStream(discounts, text/csv); } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(discounts.csv); } }; export.setCacheable(false); add(new ResourceLink(exportLink, export)); Eelco - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- Justin Stanczak Stanczak Group 812-735-3600 All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - Yahoo! kullaniyor musunuz? Istenmeyen postadan biktiniz mi? Istenmeyen postadan en iyi korunma Yahoo! Posta'da http://tr.mail.yahoo.com -- Justin Stanczak Stanczak Group 812-735-3600 All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Adding to response header (filename)?
Oh, then what should I do? Sorry if I'm missing the obvious here. Eelco Hillenius wrote: On 10/6/07, Stanczak Group [EMAIL PROTECTED] wrote: What do you mean? This is all I'm doing, but still get the HTTP Response has already been committed. error. Is there something there that wrong? SimpleDateFormat formatFile = new SimpleDateFormat(MM-dd--HH-MM); ResourceStreamRequestTarget rsrt = new ResourceStreamRequestTarget(new StringResourceStream(out, text/csv)); rsrt.setFileName(export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv); rsrt.respond(getRequestCycle()); This last line, rsrt.respond is what you shouldn't do. Eelco - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- Justin Stanczak Stanczak Group 812-735-3600 All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Adding to response header (filename)?
What do you use for the export? You probably should use a resource. For instance: public class DiscountsExport extends WebResource { public static class Initializer implements IInitializer { public void init(Application application) { SharedResources res = application.getSharedResources(); res.add(discounts, new DiscountsExport()); } } public DiscountsExport() { setCacheable(false); } @Override public IResourceStream getResourceStream() { CharSequence discounts = DataBase.getInstance().exportDiscounts(); return new StringResourceStream(discounts, text/plain); } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(discounts.csv); } } Eelco On 10/4/07, Stanczak Group [EMAIL PROTECTED] wrote: This works: getWebRequestCycle().getWebResponse().setContentType(text/csv); getWebRequestCycle().getWebResponse().setHeader(Content-Disposition, attachment;filename=\export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv\); OutputStream cout = getWebRequestCycle().getWebResponse().getOutputStream(); cout.write(out.toString().getBytes()); cout.flush(); cout.close(); But I get this in the logs. How can I do this better? 16:31:45,391 ERROR WebResponse:190 - Unable to redirect to: ?wicket:interface=:2, HTTP Response has already been committed. Stanczak Group wrote: This maybe? Should I be using getWebRequestCycle().getWebResponse() instead of getResponse().? getWebRequestCycle().getWebResponse().setHeader() Stanczak Group wrote: How can I do this in Wicket? I'm writing a csv generated file to the output, but I don't know how to tell the client what file name to use. This is what I was using before, is there another way? getResponse().setHeader(Content-Disposition, attachment;filename=\export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv\); Code## getResponse().setContentType(text/csv); getResponse().setHeader(Content-Disposition, attachment;filename=\export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv\); OutputStream cout = getResponse().getOutputStream(); cout.write(out.toString().getBytes()); cout.flush(); cout.close(); -- Justin Stanczak Stanczak Group 812-735-3600 All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Adding to response header (filename)?
On 10/5/07, Eelco Hillenius [EMAIL PROTECTED] wrote: What do you use for the export? You probably should use a resource. For instance: public class DiscountsExport extends WebResource { public static class Initializer implements IInitializer { public void init(Application application) { SharedResources res = application.getSharedResources(); res.add(discounts, new DiscountsExport()); } } public DiscountsExport() { setCacheable(false); } @Override public IResourceStream getResourceStream() { CharSequence discounts = DataBase.getInstance().exportDiscounts(); return new StringResourceStream(discounts, text/plain); } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(discounts.csv); } } Sorry, this might be easier to understand: WebResource export = new WebResource() { @Override public IResourceStream getResourceStream() { CharSequence discounts = DataBase.getInstance() .exportDiscounts(); return new StringResourceStream(discounts, text/csv); } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(discounts.csv); } }; export.setCacheable(false); add(new ResourceLink(exportLink, export)); Eelco - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Adding to response header (filename)?
Ya, I like that. I'll give all these a shot. Here's what I setup thus far, before reading these posts. But what you have is much simpler. Thanks. mount(new URIRequestTargetUrlCodingStrategy(/cvs) { @Override public IRequestTarget decode(RequestParameters param) { return new CVSRequestTarget(); } }); class CVSRequestTarget implements IRequestTarget { public CVSRequestTarget() { } public void respond(RequestCycle requestCycle) { WebResponse response = (WebResponse) requestCycle.getResponse(); boolean includeArchived = Boolean.getBoolean(requestCycle.getRequest().getParameter(includeArchived)); Long divisionId = Long.getLong(requestCycle.getRequest().getParameter(divisionId)); Logger.getLogger(getClass()).error(includeArchived + \n\n); Logger.getLogger(getClass()).error(divisionId + \n\n); Session session = ((RequestCycleImpl) requestCycle).getHibernateSession(); Transaction tx = session.beginTransaction(); try { StringBuilder out = new StringBuilder(); SimpleDateFormat format = new SimpleDateFormat(MM/dd/); List divisions = session.createCriteria(Division.class).list(); out.append(Address,City,Country,Email,First Name,Key,Identification,Last Name,Middle Name,Phone,Special Needs,State,Zip,Division,Major,Visit Date\n); for (Object object : divisions) { Division div = (Division) object; for (Major major : div.getMajors()) { for (VisitDate visitDate : major.getVisitDates()) { if (visitDate.isArchived() !includeArchived) { break; } for (Student student : visitDate.getStudents()) { out.append(student.getAddress()); out.append(,); out.append(student.getCity()); out.append(,); out.append(student.getCountry()); out.append(,); out.append(student.getEmail()); out.append(,); out.append(student.getFname()); out.append(,); out.append(student.getId()); out.append(,); out.append(student.getIdentification()); out.append(,); out.append(student.getLname()); out.append(,); out.append(student.getMname()); out.append(,); out.append(student.getPhone()); out.append(,); out.append(student.getSpecial()); out.append(,); out.append(student.getState()); out.append(,); out.append(student.getZip()); out.append(,); out.append(div.getName()); out.append(,); out.append(major.getName()); out.append(,); out.append(format.format(visitDate.getDate())); out.append(\n); } } } } tx.commit(); SimpleDateFormat formatFile = new SimpleDateFormat(MM-dd--HH-MM); response.setContentType(text/csv); response.setHeader(Content-Disposition, attachment;filename=\export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv\); OutputStream cout = response.getOutputStream(); cout.write(out.toString().getBytes()); cout.flush(); cout.close(); } catch (IOException e) { Logger.getLogger(getClass()).error(e); } } public void detach(RequestCycle requestCycle) { } Johan Compagner wrote: or something like this: new Link() { onclick() { CharSequence discounts = DataBase.getInstance() .exportDiscounts(); ResourceStreamRequestTarget rsrt = new ResourceStreamRequestTarget(new StringResourceStream(discounts, text/csv)); rsrt.setFileName(name); setRequestTarget(rsrt) } } Maybe we should give ResourceStreanRequestTarget 1 extra constructor with the file name.. setRequestTarget(new ResourceStreamRequestTarget(new StringResourceStream(discounts, text/csv,name))) On 10/5/07, Eelco Hillenius [EMAIL PROTECTED] wrote: On 10/5/07,
Re: Adding to response header (filename)?
Instead of setRequestTarget(rsrt) I use this rsrt.respond(getRequestCycle());, is that correct? It does work, but I get this in the logs 08:53:03,277 ERROR WebResponse:190 - Unable to redirect to: ?wicket:interface=:2, HTTP Response has already been committed.. It works, but I wouldn't mind fixing that error, just to keep things clean. Johan Compagner wrote: or something like this: new Link() { onclick() { CharSequence discounts = DataBase.getInstance() .exportDiscounts(); ResourceStreamRequestTarget rsrt = new ResourceStreamRequestTarget(new StringResourceStream(discounts, text/csv)); rsrt.setFileName(name); setRequestTarget(rsrt) } } Maybe we should give ResourceStreanRequestTarget 1 extra constructor with the file name.. setRequestTarget(new ResourceStreamRequestTarget(new StringResourceStream(discounts, text/csv,name))) On 10/5/07, Eelco Hillenius [EMAIL PROTECTED] wrote: On 10/5/07, Eelco Hillenius [EMAIL PROTECTED] wrote: What do you use for the export? You probably should use a resource. For instance: public class DiscountsExport extends WebResource { public static class Initializer implements IInitializer { public void init(Application application) { SharedResources res = application.getSharedResources(); res.add(discounts, new DiscountsExport()); } } public DiscountsExport() { setCacheable(false); } @Override public IResourceStream getResourceStream() { CharSequence discounts = DataBase.getInstance().exportDiscounts(); return new StringResourceStream(discounts, text/plain); } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(discounts.csv); } } Sorry, this might be easier to understand: WebResource export = new WebResource() { @Override public IResourceStream getResourceStream() { CharSequence discounts = DataBase.getInstance() .exportDiscounts(); return new StringResourceStream(discounts, text/csv); } @Override protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(discounts.csv); } }; export.setCacheable(false); add(new ResourceLink(exportLink, export)); Eelco - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- Justin Stanczak Stanczak Group 812-735-3600 All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Adding to response header (filename)?
This works: getWebRequestCycle().getWebResponse().setContentType(text/csv); getWebRequestCycle().getWebResponse().setHeader(Content-Disposition, attachment;filename=\export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv\); OutputStream cout = getWebRequestCycle().getWebResponse().getOutputStream(); cout.write(out.toString().getBytes()); cout.flush(); cout.close(); But I get this in the logs. How can I do this better? 16:31:45,391 ERROR WebResponse:190 - Unable to redirect to: ?wicket:interface=:2, HTTP Response has already been committed. Stanczak Group wrote: This maybe? Should I be using getWebRequestCycle().getWebResponse() instead of getResponse().? getWebRequestCycle().getWebResponse().setHeader() Stanczak Group wrote: How can I do this in Wicket? I'm writing a csv generated file to the output, but I don't know how to tell the client what file name to use. This is what I was using before, is there another way? getResponse().setHeader(Content-Disposition, attachment;filename=\export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv\); Code## getResponse().setContentType(text/csv); getResponse().setHeader(Content-Disposition, attachment;filename=\export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv\); OutputStream cout = getResponse().getOutputStream(); cout.write(out.toString().getBytes()); cout.flush(); cout.close(); -- Justin Stanczak Stanczak Group 812-735-3600 All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Adding to response header (filename)?
This maybe? Should I be using getWebRequestCycle().getWebResponse() instead of getResponse().? getWebRequestCycle().getWebResponse().setHeader() Stanczak Group wrote: How can I do this in Wicket? I'm writing a csv generated file to the output, but I don't know how to tell the client what file name to use. This is what I was using before, is there another way? getResponse().setHeader(Content-Disposition, attachment;filename=\export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv\); Code## getResponse().setContentType(text/csv); getResponse().setHeader(Content-Disposition, attachment;filename=\export_ + formatFile.format(Calendar.getInstance().getTime()) + .csv\); OutputStream cout = getResponse().getOutputStream(); cout.write(out.toString().getBytes()); cout.flush(); cout.close(); -- Justin Stanczak Stanczak Group 812-735-3600 All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]