У меня есть страница JSP, содержащая h:dataTable
.У таблицы данных есть столбец h:commandLink
компонентов, которые открывают новое всплывающее окно.Эти компоненты commandLink имеют метод actionListener
в компоненте поддержки страницы.Код определяет, какой компонент commandLink был выбран, получает его параметр и перенаправляет его на сервлет.Сервлет записывает файл во всплывающее окно и отображает диалоговое окно «Сохранить как / открыть», чтобы пользователь мог загрузить записанный файл.Это все работает нормально.
Однако после закрытия всплывающего окна, если я нажимаю кнопку JSF на странице, я снова получаю диалоговое окно «Сохранить как / открыть».Как предотвратить появление этого диалогового окна?Я заметил, что этого не произойдет, если Page1.jsp
обновляется до нажатия кнопки JSF.
Вот код:
Page1.jsp
<noscript>
<!-- Page1.jsp -->
<webuijsf:button actionExpression="#{Page1.btnSubmit_action}" id="btnSubmit" text="Apply"/>
<h:column id="column9">
<h:commandLink value=" Open " target="popupWindow" actionListener="#{Page1.openPopupClicked}" >
<f:param id="tmpFileId" name="id" value="#{currentRow['J_LINK']}" />
</h:commandLink>
<h:outputLink target="_blank" value="#{currentRow['J_LINK']}"/>
<f:facet name="header">
<h:outputText id="outputText18" value="More "/>
</f:facet>
</h:column>
</noscript>
Page1
компонент поддержки
public void openPopupClicked(ActionEvent event){
UIParameter tmpFileName = (UIParameter)event.getComponent().findComponent("tmpFileId");
if(tmpFileName==null)
return;
String fName = (String)tmpFileName.getValue();
if(fName==null)
return;
final String viewId = "/FileDisplayerServlet";
HttpSession hs = this.getHttpSession();
hs.setAttribute("tmpToShow", fName);
this.redirectToServlet(viewId);
}
Код сервлета, вызываемый методом processRequest:
private void printFileToScreen(HttpServletRequest request,String tmpFileToShow, HttpServletResponse response)
throws IOException{
ServletOutputStream sos = null;
FileInputStream in = null;
try{
response.reset();
response.setContentType(getContentType(tmpFileToShow));
if(currFileExt==null)
return;
String fileName = "document.".concat(currFileExt);
sos = response.getOutputStream();
response.setHeader("Content-disposition", "attachment; fileName="+fileName);
File src = new File(tmpFileToShow);
in = new FileInputStream(src);
byte[] buf = new byte[1024];
int len =0;
response.setHeader("Cache-Control", "private");
while((len = in.read(buf, 0, buf.length)) > 0){
sos.write(buf, 0, len);
}
}catch(IOException ie){
System.out.println("printFileToScr: "+ie.toString());
}finally{
if(sos!=null)
{sos.flush(); sos.close();}
if(in!=null)
{in.close();}
}
}