繁体   English   中英

JSF Ajax更新

[英]JSF ajax update

我问了这个问题,但没有得到任何帮助。 假设我在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>

我的后备豆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 ,仅当方法完成时,我不会立即看到响应。 在浏览器的控制台中,我只能看到20秒后才能看到所有my_check日志。 我想要的是每2秒显示num ,即loop()方法中的每个增量。

此代码只是即兴创作。 我真正想做的是将百分比附加到加载微调器上。

我尝试了不同的解决方案,但没有一个适合我。 请就此与我分享您的意见和经验。

提前致谢

这是预期的行为。 由于在常规方法调用中,服务器仅在方法完成后才将数据发送回客户端。 两种可能的解决方案:

  • 使用客户端轮询
  • 使用服务器推送

通过一些非常简单的google用法,我发现了同时支持这两个功能的icefaces组件 (我什至都​​不是IceFaces用户)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM