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.

questionAnswers(3)

yourAnswerToTheQuestion