gpt4 book ai didi

java - 如何在继续执行时更新弹出窗口上的信息

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:38 25 4
gpt4 key购买 nike

我有一个带有自定义“确定”按钮的取消弹出窗口用于确认,我想在执行过程中更新其进度信息。

弹窗如下

<af:popup id="confirmationPopupSend" binding="#{pageFlowScope.bean.confirmationPopup}" contentDelivery="immediate">
<af:dialog id="confirmationDialogSend" modal="true" title="Confirmation" type="cancel">
<f:facet name="buttonBar">
<af:commandButton id="confirmDialogButtonSend" text="OK" action="#{pageFlowScope.bean.submitAction}"/>
</f:facet>
<af:outputText value="Are you sure? This might take a while."/>
<af:outputText visible="#{pageFlowScope.bean.someProgress> 0}"
value="#{pageFlowScope.bean.someProgress}" />
</af:dialog>
</af:popup>

我的submitAction方法如下

    public String submitAction()
{
for(some for condition){
//update the variable someProgress
refreshLoadingPopup();
}
}

以及刷新方法

public String refreshLoadingPopup(){
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root = context.getViewRoot();
UIComponent c = findComponent(root, "confirmationDialogSend")
AdfFacesContext.getCurrentInstance().addPartialTarget(c);
}

这里的问题是刷新方法正常工作。我通过在弹出窗口上放置一个测试按钮来检查它,它会更新信息,但是当我将刷新方法放在 SubmitAction 方法中时,随着执行的继续,弹出窗口上没有任何反应。一旦submitAction结束执行,弹出窗口就会关闭。

我只是想向用户展示进度。也欢迎任何其他方法。

谢谢

最佳答案

您无法仅通过调用 refreshLoadingPopup 方法来更新弹出窗口。以下行只是标记要刷新的组件 c

AdfFacesContext.getCurrentInstance().addPartialTarget(c);

在处理请求时(submitAction 方法中的循环正在执行),客户端不会有响应,组件 c 也不会刷新。

您应该继续更新 for 循环中的 pageFlowScope.bean.someProgress 属性,并使客户端轮询该值,即每 0.5 秒一次。

您可以使用 af:poll 组件来满足此要求。以下示例展示了如何使用 af:poll 组件:http://www.oracle.com/technetwork/developer-tools/adf/learnmore/42-progressbarcolor-169184.pdf

关于java - 如何在继续执行时更新弹出窗口上的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35229517/

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