我问过这个问题,但我没有得到任何帮助。
假设我在xhtml
<h:form id="viewSnForm" prependId="false">
<h:commandButton id="kopce" value="kopce">
<f:ajax event="click" render="panelTarget" execute="kopce" listener="#{myBean.loop()}"></f:ajax>
</h:commandButton>
<h:panelGroup id="panelTarget">
<h:outputText id="target" value="#{myBean.num}"/>
</h:panelGroup>
</h:form>
我的支持bean myBean.java
看起来像这样
public void runMyScript(){
JavaScriptRunner.runScript(FacesContext.getCurrentInstance(),
"console.log('my_check'); document.getElementById('target').innerHTML = " + this.num + ";");
}
public void loop(){
for (int i = 0; i < 10; i++) {
this.num += 1;
runMyScript();
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Logger.getLogger(MyCompanyBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
在我的bean中我数到10,我喜欢在每个仪器中模拟2秒等待,但在我的xhtml
中,我没有立即看到响应,只有在方法完成时才会看到。在我的浏览器控制台中,我可以看到所有my_check
日志,但只有在通过20秒时才能看到。
我想要的是每2秒后显示num
,即loop()
方法中的每一个增量。
此代码只是即兴创作。我真正想做的是将百分比附加到我的加载微调器。
我尝试了不同的解决方案,但没有一个能适合我。请与我分享您的意见和经验。
提前致谢
答案 0 :(得分:0)
这是预期的行为。由于在正常方法调用中,服务器仅在方法完成时将数据发送回客户端。两种可能的解决方案:
通过一些非常简单的谷歌使用,我发现this icefaces component支持两者(我甚至不是IceFaces用户)