您好我正在使用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}
需要另一次提取,因此被忽略,而两者都是在民意调查中检索的。
谢谢!
答案 0 :(得分:4)
是的,你可以。这其实很简单。将<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()
将是未定义的。
你是对的。如果您在开发者控制台中查看,您会看到以下aaax对进度条的响应
"thePanel:progress_value":20
这几乎总结了进度条在更新期间所关注的内容,以及条形图上的值绑定。如果这对你来说是必须的,那就坚持你现在所拥有的。