У меня есть несколько командных кнопок в 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)
{
}
}
}