Good Day,
I am having an issue downloading a file depending on parameters inputted on
a dialog. Perhaps someone could point me in the right direction
Basically required functionality is as follows:
- A user clicks on a link to generate a report.
- A dialog pops up where the user can input parameters for the report.
- The user clicks the OK button
- The report is generated, and sent to the user as a file download.
Versions:
MyFaces v1.1.5
Trinidad v1.0.3
Jetty 6.1.5
Firefox: 2.0.0.9 / IE 6.0
I've tried a few ways of doing this.
1. Attempt the generation and download in the dialogs return method. This
causes an invalid PPR response (as seen using FireBug)
public void handleDialogReturn(ReturnEvent evt) {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response =
( HttpServletResponse )
context.getExternalContext().getResponse();
OutputStream out = null;
InputStream in = null;
try
{
in = getService().generateReport(
selectedReport, getSelectedMonth(), getSelectedYear(),
getReportType());
if (in != null) {
response.setContentType(getReportContentType()); // i.e.
"application/vnd.ms-excel"
response.setHeader("Content-Disposition",
"attachment;filename=\""
+ selectedReport.getFilename() ");
out = response.getOutputStream();
int read = -1;
byte[] buffer = new byte[1024];
while ((read = in.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, read);
}
out.flush();
}
}
catch (IOException ex) {
}
finally
{
try
{
out.close();
}
catch (Exception ex) {}
try
{
in.close();
}
catch (Exception ex) {}
}
context.responseComplete();
}
2. Try to do the same thing in the actionListener method of the dialog's
commandButton. The download here works, however, when calling the
returnFromDialog method, I get the following exception and the dialog
remains in view:
Caused by: java.lang.IllegalStateException: STREAM
at org.mortbay.jetty.Response.getWriter(Response.java:583)
at javax.servlet.ServletResponseWrapper.getWriter(
ServletResponseWrapper.java:122)
at
org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderKit._getHtmlWriter
(CoreRenderKit.java:744)
at
org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderKit.returnFromDialog(
CoreRenderKit.java:282)
at
org.apache.myfaces.trinidadinternal.context.DialogServiceImpl.returnFromDialog
(DialogServiceImpl.java:173)
at
org.apache.myfaces.trinidadinternal.context.RequestContextImpl.returnFromDialog(
RequestContextImpl.java:122)
Any comments/suggestions would be highly appreciated,
thanks,
Oscar