我有一个常规的Ajax PF progressBar:
<p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true" widgetVar="progress">
<p:ajax event="complete" oncomplete="progress.cancel();"></p:ajax>
</p:progressBar>
每当progressBar更新它的值时,如何运行我的JavaScript代码?
答案 0 :(得分:6)
使用RequestContext
对象从服务器端执行javascript。要使用它:
在您的支持bean中定义一个方法,您将在该方法中使用RequestContext
对象
public void doJs() {
RequestContext ctx = RequestContext.getCurrentInstance();
context.execute("progress.cancel();");
}
在listener
<p:ajax/>
属性中设置此方法
<p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true"
widgetVar="progress">
<p:ajax event="complete" listener="#{theBean.doJs}"/>
</p:progressBar>
编辑:要在每次ajax更新后执行执行,设置会略有不同:
将interval
属性添加到进度条以引入更好的受控轮询机制
<p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true"
widgetVar="progress" interval="3000">
添加<f:event/>
以挂钩组件的页面生命周期,并从那里执行服务器端更新。我将推荐PostValidateEvent
活动
<p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true"
widgetVar="progress" interval="3000">
<f:event type="postValidate" listener="#{theBean.doJs}" />
</p:progressBar>