Atualizar componente após o download do arquivo
Estou usando o PrimeFaces TabView, CommandButton e FileDownload para baixar um arquivo de log. Depois que o arquivo de log tiver sido baixado, desejo oferecer a opção de excluir o conteúdo do log do servidor.
Inicialmente, o botão Excluir arquivo de registro (deleteEventLogButton) é desativado e possui uma legenda personalizada indicando "Excluir registros - Exportação necessária". Depois que o registro for exportado, o botão deve estar ativado e a legenda deve conter "Excluir registros".
O problema que estou tendo é que o botão Excluir arquivo de log ainda está desativado e a legenda lê "Excluir logs - exportação necessária" mesmo depois que o evento de exportação for concluído com êxito.
Meu palpite é que o exportEventLogButton-> Update = "deleteEventLogButton" está sendo chamado antes do valor fileDownload.
Depois de exportar os logs, posso pressionar 'F5' e atualizar a página, e o deleteEventLogButton está ativado mostrando a legenda correta.
JSF - Snippet
<p:tabView id="logView">
<p:tab id="eventLogTab" title="Security Events">
<p:panelGrid ...>
<p:commandButton id="exportEventLogButton" icon="ui-icon-disk" styleClass="c25" ajax="false" title="Export Log" disabled="#{empty managedCmsLogsBean.eventLogEntityList}" update="deleteEventLogButton">
<p:fileDownload value="#{managedCmsLogsBean.exportEventLogFiles()}"/>
</p:commandButton>
<p:commandButton id="deleteEventLogButton" icon="ui-icon-trash" styleClass="c25" ajax="false" title="#{managedCmsLogsBean.deleteEventLogCaption}" disabled="#{! managedCmsLogsBean.eventLogExported}" action="#{managedCmsLogsBean.clearEventLogs()}" update="eventLogTab" />
</p:panelGrid>
<p:dataTable value="#{managedCmsLogsBean.eventLogEntityList}" ...>
...
</p:dataTable>
</p:tab>
</p:tabView>
Feijão de Apoio - Snippet
private boolean eventLogExported;
public StreamedContent exportEventLogFiles() {
eventLogExported = true;
return logFileUtility.exportSecurityEventLog(eventLogEntityList, eventLogStartDate, eventLogStopDate);
}
public boolean isEventLogExported() {
return eventLogExported;
}
public void setEventLogExported(boolean value) {
eventLogExported = value;
}
public String getDeleteEventLogCaption() {
return eventLogExported ? "Delete Logs" : "Delete Logs - Export Required";
}
Eu tentei mover o evento de atualização dentro do FileDownload, mas isso não fez diferença.
<p:commandButton id="exportEventLogButton" icon="ui-icon-disk" styleClass="c25" ajax="false" title="Export Log" disabled="#{empty managedCmsLogsBean.eventLogEntityList}">
<p:fileDownload value="#{managedCmsLogsBean.exportEventLogFiles()}">
<p:ajax update="deleteEventLogButton"/>
</p:fileDownload>
</p:commandButton>
Eu procurei por um par de dias agora e encontrei muitos problemas que chegam muito perto deste ... mas nenhum que ajudou. :(
Só para deixar as coisas bem claras ... NÃO estou tendo problemas com a exportação. O problema é que o botão Excluir arquivo de log não está ativado após a conclusão da exportação.