gpt4 book ai didi

java - 下载后如何刷新页面

转载 作者:搜寻专家 更新时间:2023-11-01 02:33:38 26 4
gpt4 key购买 nike

我有一个 commandButton 将调用一个函数来下载文件(标准的东西,如 InputStreamBufferedOutputStream ...)下载成功后,在结束时函数,我更改了当前对象的一些值并将其保存到数据库中。所有这些都正常工作。现在当文件下载完成时,页面内容不会更新。我必须点击刷新才能看到更新的内容。请帮忙。以下是我的代码的基本结构

文档:托管Bean
getDrawings():方法返回绘图列表(实体类)
CheckedOutBy:实体Drawing

的属性
<p:dataTable id="drawing_table" value="#{document.drawings}" var="item" >                            
<p:column>
<f:facet name="header">
<h:outputText value="CheckedOutBy"/>
</f:facet>
<h:outputText value="#{item.checkedOutBy}"/>
...
</p:dataTable>
<p:commandButton ajax="false" action="#{document.Download}" value="Download" />

在我的托管 Bean 中

public void Download(){
Drawing drawing = getCurrentDrawing();
//Download drawing
drawing.setCheckedOutBy("Some Text");
sBean.merge(drawing); //Update "Some Text" into CheckedOutBy field
}

最佳答案

您基本上想让客户端发出两个 请求。一个用于检索下载,另一个用于刷新新页面。它们不能在单个 HTTP 请求中完成。由于下载需要同步进行,并且无法从客户端 Hook 完成下载,因此没有干净的 JSF/JS/Ajax 方法来在下载完成时更新组件。

在 PrimeFaces 的帮助下,您最好的 JSF 赌注是 <p:poll>

<h:outputText id="checkedOutBy" value="#{item.checkedOutBy}"/>
...
<p:poll id="poll" interval="5" update="checkedOutBy" />

<p:push>

<p:push onpublish="javaScriptFunctionWhichUpdatesCheckedOutBy" />  

轮询很简单,但我可以想象它会增加不必要的开销。当同步下载开始时,您无法使用标准 JSF/PrimeFaces 组件启动它。但是您可以停止它,让它对 rendered 进行自检。属性。推送在技术上是最好的解决方案,但更难上手。 PrimeFaces 在用户指南的第 6 章中很好地解释了它的用法。

关于java - 下载后如何刷新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3471880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com