With the code above you'll run into a problem whereby on the page a click seems to be ignored after the download.

Put this before responseComplete to fix things up.

context.getApplication().getStateManager().saveSerializedView(context);

On 12/19/05, Mike Kienenberger <[EMAIL PROTECTED] > wrote:
On 12/19/05, Anu Padki <[EMAIL PROTECTED]> wrote:
> Is it not possible to download a file using action method?
>  Do we have to write a servlet?

Nope.  Here's how I do it.

    public String downloadContentData()
    {
        Content selectedContent =
(Content)this.announcementContentDataList.getRowData();
        FacesContext facesContext = FacesContext.getCurrentInstance ();

        try
        {
            OutputStream responseStream =
((HttpServletResponse)facesContext.getExternalContext().getResponse()).getOutputStream();

            HttpServletResponse response =
(HttpServletResponse)facesContext.getExternalContext().getResponse();
            response.setContentType(selectedContent.getContentType());
            response.setHeader("Content-Disposition","attachment;filename=\""
+ selectedContent.getContentId() + "\"");
            response.setContentLength(selectedContent.getContentData().getData().length);
            responseStream.write(selectedContent.getContentData ().getData());

            response.flushBuffer();
        }
        catch (IOException exception)
        {
            // TODO Auto-generated catch block
            exception.printStackTrace();
        }

        facesContext.responseComplete();

        return "downloadContentData";
    }

Reply via email to