Primefaces TabView、CommandButton、および FileDownload を使用してログ ファイルをダウンロードしています。ログ ファイルがダウンロードされたら、ログの内容をサーバーから削除するオプションを提供したいと考えています。
最初は、[ログ ファイルの削除] ボタン (deleteEventLogButton) は無効になっており、「ログの削除 - エクスポートが必要です」というカスタム キャプションがあります。ログがエクスポートされると、ボタンが有効になり、キャプションに「ログの削除」と表示されます。
私が抱えている問題は、[ログ ファイルの削除] ボタンがまだ無効になっていて、エクスポート イベントが正常に完了した後でも、キャプションに "ログの削除 - エクスポートが必要です" と表示されることです。
私の推測では、 fileDownload 値の前に exportEventLogButton->Update="deleteEventLogButton" が呼び出されています。
ログをエクスポートしたら、[F5] を押してページを更新すると、deleteEventLogButton が有効になり、正しいキャプションが表示されます。
JSF-スニペット
<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>
バッキング Bean - スニペット
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";
}
FileDownload 内で更新イベントを移動しようとしましたが、違いはありませんでした。
<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>
私は数日間検索しましたが、これに非常に近い多くの問題を見つけました...しかし、助けにはなりませんでした。:(
はっきりさせておきたいのですが、エクスポートに問題はありません。問題は、エクスポートの完了後に [ログ ファイルの削除] ボタンが有効にならないことです。