Командную кнопку JSF можно нажать только один раз при вызове сервлета для загрузки файла - PullRequest
1 голос
/ 01 ноября 2019

У меня есть несколько командных кнопок в jsf, одна из которых при нажатии при создании файла и загрузке. В классе действия, который обрабатывает действие jsf, я создаю объект url, который имеет URL-адрес для вызова сервлета. Это все работает, файл загружается один раз, когда я нажимаю на кнопку, но проблема в том, что после этого я не могу нажать кнопку или любую другую командную кнопку на странице. Почему запрос не завершен? Пожалуйста, помогите.

<h:commandButton id="filedownloadbtn" action="#{fileDownloadInit.submit}" value = "thisform">

Действие

 try {

String             baseURL =  facesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
          String             url            = baseURL + "/DataloadServlet";


            facesContext.getCurrentInstance().getExternalContext().redirect(url);
            return null;
        } finally {

            facesContext.responseComplete();
        }'

DataloadServlet

 public Object[] getFileNameAndData(HttpServletRequest request)
    {   

            ByteArrayOutputStream stream = new ByteArrayOutputStream();

            //does some processing...

            return new Object[] {fileName, stream.toByteArray()};
}

FileDownloadservlet

public abstract class  FileDownloadservlet extends javax.servlet.http.HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        Object[] file = getFileNameAndData(request);
            if (file != null)
            {
                String fileName = (String)file[0];
                byte[] fileData = (byte[])file[1];

                response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName +"\"");



                    response.setHeader("Cache-Control", "no-cache, no-store"); // HTTP 1.1.
                    response.setHeader("Pragma", "no-cache"); // HTTP 1.0.


                String contentType = "application/vnd.ms-excel";
                response.setContentType(");
                response.setContentLength(fileData.length);
                try
                {
                    OutputStream output = response.getOutputStream();
                    output.write(fileData);
                    output.flush();
                    output.close();
                }
                catch (IOException ex)
                {

                }
            }

}
...