Primefaces进度条的动态标签

时间:2013-01-25 22:18:05

标签: jsf primefaces progress-bar

您好我正在使用JSF和Primefaces。我有一个很长的任务,在此期间我想向用户显示进度条,其中progress(int)和status(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)我可以不使用poll而使用,因为progressBar本身有ajax函数吗?请注意,我在上面的代码中设置了ajax = false。 On their website, it says "dynamic progress label" is added。我试过但不知何故标签只显示没有statusMessage的"{value}%"。我想知道这是否是因为#{statusMessage}需要另一次提取,因此被忽略,而两者都是在民意调查中检索的。

谢谢!

1 个答案:

答案 0 :(得分:4)

  1. 是的,你可以。这其实很简单。将<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()将是未定义的。

  2. 你是对的。如果您在开发者控制台中查看,您会看到以下aaax对进度条的响应

     "thePanel:progress_value":20
    

    这几乎总结了进度条在更新期间所关注的内容,以及条形图上的值绑定。如果这对你来说是必须的,那就坚持你现在所拥有的。

相关问题