带有 blockUI 的实时进度条无法使用带有气氛的 primefaces

Real Time Progress bar with a blockUI doesn't work using primefaces with atmosphere

我有一个按钮,当我按下它时,该方法从数据库中获取数据并将记录显示在数据表中。动作超过1分钟,我想显示进度条(时间可变)

我在这个页面找到了解决方案:Show a real time progress bar in a Html User Dialog

问题是我显示了进度条,但始终是“0%”。在java脚本函数中永远不要输入。而且我不知道我做错了什么。

这是我的 XHTML:

    <h:form id="formAllocate">

    <p:panel id="panel" header="Realtime ProgressBar">
        <p:commandButton id="btn" value="Start"
            actionListener="#{scheduleMB.startLongRunningProcess}">
        </p:commandButton>
    </p:panel>

    <p:blockUI block="panel" trigger="btn">
        <p:progressBar widgetVar="progressBar" style="width:300px"
            labelTemplate="{value}%">
        </p:progressBar>
        <span id="msg"></span>
    </p:blockUI>

</h:form>

<p:socket channel="/realtime" onMessage="handleProgress"></p:socket>

<script type="text/javascript">
    function handleProgress(progressJson) {
        alert('begin');
        var progressData = eval("(" + progressJson + ")");
        progressBar.setValue(progressData.progress);
        $("#msg").text(progressData.msg);
    }
</script>

这是我的 Bean:

public void startLongRunningProcess(){
    EventBus eventBus = EventBusFactory.getDefault().eventBus();
    eventBus.publish("/realtime", "{ 'progress' : 10, 'msg' : 'Extract data'}");

    list =
        getAuxService().findList(userSelected, initDate2,
            endDate2);
  }

在web.xml中:

<!-- Primefaces PUSH -->
    <servlet>
        <servlet-name>Push Servlet</servlet-name>
        <servlet-class>org.primefaces.push.PushServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>Push Servlet</servlet-name>
        <url-pattern>/primepush/*</url-pattern>
    </servlet-mapping>

在我的 pom.xml 中,我有以下依赖项:

<dependency>
    <groupId>org.atmosphere</groupId>
        <artifactId>atmosphere-runtime</artifactId>
    <version>2.2.2</version>
</dependency>

<dependency>
    <groupId>org.roboguice</groupId>
    <artifactId>roboguice</artifactId>
    <version>2.0</version>
</dependency>

我正在使用 primefaces 5.1、spring 3.2.5、hibernate 4.2.7、java 1.7、primefaces 扩展 3.0.0

我哪里做错了???

感谢您的帮助和回答。

可以在 PrimeFaces 论坛

的(重复)post 中找到(我的)答案

总结:

  1. @PushEndpoint 丢失
  2. 未遵循 4.0 到 5.0 迁移指南访问 PF 小部件 (widgetName -> PF('widgetName))
  3. OP不知道每次都发布一个事件来设置进度条的增量