【问题标题】:JSF ajax updateJSF ajax 更新
【发布时间】:2015-03-26 12:02:31
【问题描述】:

我问过这个问题,但没有得到任何帮助。 假设我的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() 方法中的每个增量。

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

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

提前致谢

【问题讨论】:

    标签: ajax jsf icefaces


    【解决方案1】:

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

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

    通过一些非常简单的谷歌用法,我发现this icefaces component 支持两者(我什至不是 IceFaces 用户)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2013-01-11
      • 2012-03-21
      • 2015-04-24
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多