单击 updateRecords 按钮,将执行DB操作,这需要很长时间。我打算显示一个动态进度条,描述DB操作对用户的状态。
我正在使用myfaces.orchestra的访问范围& primefaces的进度条。
管弦乐队应用了一个锁,并且在完全执行 myBean.updateRecords()之前不允许提取 myBean.progressMonitor 。
错误是:
等待超过30000毫秒的时间来访问锁定org.apache.myfaces.lib._ReentrantLock@2c93ed并被线程锁定..
有ReentrantLock不允许从不同的角度访问FacesContex 线。因此无法访问进度条模型和部分 请求被锁定,直到完整请求完成。虽然ajax设置为'false'。
我们如何允许与管弦乐队同时发出请求?
我也试过创建一个线程&在该线程中执行繁重的操作。但是,我没有得到FacesContext。
同样的解决方法是什么?
示例代码段:
<p:commandButton id="updateRecords" onclick="startProgressBar();"
async="true" ajax="false" actionListener="#{myBean.updateRecords}" />
<h:panelGrid id="progressBarPanel">
<p:progressBar id="progress" interval="10"
rendered="#{myBean.progressBarRendered}" ajax="true"
value="#{myBean.progressMonitor}"
widgetVar="pbAjax" labelTemplate="{value}%}"/>
</h:panelGrid>