Aktualizacja składnika po pobraniu pliku
Używam PrimeFaces TabView, CommandButton i FileDownload do pobrania pliku dziennika. Po pobraniu pliku dziennika chcę zaoferować opcję usunięcia zawartości dziennika z serwera.
Początkowo przycisk Usuń plik dziennika (deleteEventLogButton) jest wyłączony i zawiera niestandardowy podpis „Usuń dzienniki - wymagane eksportowanie”. Po wyeksportowaniu dziennika przycisk powinien być włączony, a podpis powinien zawierać „Usuń dzienniki”.
Mam problem z tym, że przycisk Usuń plik dziennika jest nadal wyłączony, a napis brzmi „Usuń dzienniki - wymagane eksportowanie” nawet po pomyślnym zakończeniu zdarzenia eksportu.
Domyślam się, że exportEventLogButton-> Update = "deleteEventLogButton" jest wywoływany przed wartością fileDownload.
Po wyeksportowaniu dzienników mogę nacisnąć „F5” i odświeżyć stronę, a przycisk deleteEventLogButton jest włączony, pokazując prawidłowy podpis.
JSF - Urywek
<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>
Backing Bean - Fragment
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";
}
Próbowałem przenieść zdarzenie aktualizacji wewnątrz pliku FileDownload, ale nie miało to znaczenia.
<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>
Szukałem już od kilku dni i znalazłem WIELE problemów, które są bardzo zbliżone do tego ... ale żaden nie pomógł. :(
Aby wszystko było jasne ... NIE mam problemów z eksportem. Problem polega na tym, że przycisk Usuń plik dziennika nie jest włączony po zakończeniu eksportu.