用于进度条的Primefaces动态标签

您好,我正在与Primefaces一起使用JSF。 我有一个很长的任务,在此期间,我想向用户显示进度条,进度(int)和状态(String)作为指示器。 这两个参数映射到后端bean的两个字段。 如果我使用<p:poll> ,则可以更新两者,如下面的代码所示:

<p:progressBar id="progress" ajax="false" value="#{backendBean.progress}" widgetVar="pbAjax"
  labelTemplate="{value}%: #{backendBean.statusMessage}" style="width:400px; font-size:12px"/>
<p:poll interval="1" id="poll" autoStart="false" update="progress" widgetVar="pbPoll"/>

一旦用户按下按钮, pbPoll.start() 。 这工作正常。 现在我有两个问题:

(1)是否有可能最初隐藏进度条? 我知道我可以在css中放置display:none,并在按钮被点击时让它显示出来。 但是轮询更新会再次隐藏进度条。 也许使用渲染。 如果是这样,请告诉我如何。

(2)我可以使用没有民意调查,因为progressBar有一个Ajax函数本身? 请注意,我在上面的代码中设置了ajax = false。 在他们的网站上,它添加了“动态进度标签”。 我尝试过,但不知何故,标签只显示没有statusMessage的"{value}%" 。 我想知道这是否是因为#{statusMessage}需要另一次获取,因此被忽略,而这两个都是在poll中检索的。

谢谢!


  • 是的你可以。 这其实很简单。 将<p:progressBar/>包装在<h:panelGrid/>面板中,并将进度条上的rendered属性设置为支持bean中的布尔值

     <h:panelGrid id="progressBarPanel">
                    <p:progressBar id="progress" interval="100"  rendered="#{backendBean.progressBarRendered}" ajax="true" value="#{backendBean.progressMonitor}" widgetVar="pbAjax" labelTemplate="{value}%: #{backendBean.progressMonitor}" style="width:300px; font-size:12px"/>
     </h:panelGrid>
    

    然后使用按钮(或其他)来切换布尔值并更新面板

      <p:commandButton value="Test Progress Bar" action="#{addressUpdate.progressBarControl}" oncomplete="pbAjax.start();" update="progressBarPanel"/>
    

    你需要小心的一件事是,切换进度条可见性的同一个按钮不应该使用onclick事件,而应该使用oncomplete来启动进度条,原因是onclick在请求到达服务器之前触发,那个时候,进度条不存在于DOM中,所以start()将是未定义的。

  • 你是对的。 如果您在开发人员控制台中查看一下,则会看到以下信息,以查看进度栏的ajax响应

     "thePanel:progress_value":20
    

    这几乎总结了进度条在更新过程中关心的内容,即条上的值绑定。 坚持你现在拥有的东西,如果这是你必须拥有的东西。

  • 链接地址: http://www.djcxy.com/p/68901.html

    上一篇: Primefaces dynamic label for progressbar

    下一篇: including js files with html and node.js