Так вот в чем дело. У меня есть всплывающее окно, в котором есть кнопка, в самой кнопке есть файл DownloadActionListener, этот отвечает за загрузку файла excel. Так что в основном мне нужно скрыть всплывающее окно сразу после создания файла.
Вот мой файл .jspx (просто всплывающее окно)
<af:popup childCreation="deferred" autoCancel="enabled"
id="myPopUp"
contentDelivery="lazyUncached"
binding="#{viewScope.mbMyBean.myPopUp}"
partialTriggers="b17">
<af:dialog id="d16" type="cancel"
title="Do you wish to download a file?"
inlineStyle="width:400px;">
<af:panelGroupLayout id="pgl32"
inlineStyle="max-width: 200px;">
<af:outputText value="You're about to download a file. Ready?" id="ot45"
/>
</af:panelGroupLayout>
<f:facet name="buttonBar">
<af:button text="GO" id="b17"
<af:fileDownloadActionListener contentType="excelHTML"
filename="#{viewScope.mbMyBean.FileName}"
method="#{viewScope.mbMyBean.GenerateEmptyExcel}"
/>
</af:button>
</f:facet>
</af:dialog>
</af:popup>
И вот java-метод:
public void GenerateEmptyExcel(FacesContext facesContext, OutputStream outputStream) {
try {
HSSFWorkbook wb1 = generateEmptyExcelFile();
wb1.write(outputStream);
outputStream.flush();
outputStream.close();
this.myPopUp.hide();
AdfFacesContext.getCurrentInstance().addPartialTarget(this.myPopUp);
System.gc();
} catch (Exception e) {
e.printStackTrace();
}
}
ПРОБЛЕМА
Всплывающее окно не скроется.
ПРИМЕЧАНИЯ
- Всплывающее окно правильно привязано к компоненту
- У меня нет этого кода, и я занимаюсь его обслуживанием.
- Я не знаю, почему программист использовал System.gc(), так как считаю это плохой практикой. Вот веская причина