Jsf 2 下载文件后更新组件
我使用Primefaces选项卡视图、CommandButton和FileDownload下载日志文件。下载日志文件后,我想提供从服务器上删除日志内容的选项 最初,“删除日志文件”按钮(deleteEventLogButton)被禁用,并有一个自定义标题,说明“删除日志-需要导出”。导出日志后,应启用按钮,标题应注明“删除日志” 我遇到的问题是,即使导出事件成功完成,删除日志文件按钮仍处于禁用状态,标题仍为“删除日志-需要导出” 我猜exportEventLogButton->Update=“deleteEventLogButton”在文件下载值之前被调用 导出日志后,我可以点击“F5”并刷新页面,此时deleteEventLogButton已启用,显示正确的标题 JSF-SnippetJsf 2 下载文件后更新组件,jsf-2,primefaces,download,Jsf 2,Primefaces,Download,我使用Primefaces选项卡视图、CommandButton和FileDownload下载日志文件。下载日志文件后,我想提供从服务器上删除日志内容的选项 最初,“删除日志文件”按钮(deleteEventLogButton)被禁用,并有一个自定义标题,说明“删除日志-需要导出”。导出日志后,应启用按钮,标题应注明“删除日志” 我遇到的问题是,即使导出事件成功完成,删除日志文件按钮仍处于禁用状态,标题仍为“删除日志-需要导出” 我猜exportEventLogButton->Update=“d
<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>
我尝试将更新事件移动到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>
我已经搜索了几天了,发现了许多与此非常接近的问题。。。但是没有一个有帮助(
我只是想说清楚…我在导出方面没有问题。问题是在导出完成后,删除日志文件按钮没有启用。您是否尝试过将eventLogExported/isEventLogExported从布尔值更改为布尔值或字符串?
p:commandButton
在您的情况下是(必须是)非AJAX按钮(通过添加AJAX=“false”
属性设置)。在这种情况下,update
属性和p:AJAX
标记没有任何意义(因为它们仅用于AJAX请求)。当您下载文件时,您的应用程序会发送某种类型的流媒体,并且您会看到“保存文件”对话框。您的页面不会刷新。因此,您必须使用PrimeFaces.monitorDownload
来执行此操作:
<p:commandButton id="exportEventLogButton"
icon="ui-icon-disk"
styleClass="c25"
ajax="false"
title="Export Log"
disabled="#{empty managedCmsLogsBean.eventLogEntityList}"
onclick="PrimeFaces.monitorDownload(null, stop)">
并添加停止功能,该功能将更新第二个按钮:
<p:remoteCommand name="stop" update="deleteEventLogButton"/>
正如在()中所回答的,我们不能从一个请求中得到两次响应,要在下载后刷新页面,最好在下载链接(p:commandbutton)onclick标记中使用以下java脚本
例如:
<p:commandButton ajax="false" icon="ui-icon-arrowstop-1-s" onclick="setTimeout('location.reload();', 1000);" action="#{managedBean.downloadMethod}" />
这将在1秒后自动刷新页面,同时,即在刷新之前,您将获得下载文件,根据您的下载响应时间,增加该脚本中的秒数。秒数不应小于该下载响应时间。我现在有了…但没有任何区别。感谢您的支持建议。太棒了!这个网站运行得很好。我喜欢这个网站…这是因为像你这样的人!因为你是新手,如果这有助于你接受回答谢谢!!它对我也很有效,在我的情况下,我必须将ajax=“true”与
<p:commandButton ajax="false" icon="ui-icon-arrowstop-1-s" onclick="setTimeout('location.reload();', 1000);" action="#{managedBean.downloadMethod}" />