2016-12-16 49 views
0

在p:poll上的每個ajax更新上,啓動一個新的附加計時器。 我該如何避免它?經過幾次ajax更新後,我的輪詢每秒執行多次。p:poll上的Ajax更新

此代碼演示了:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:f="http://xmlns.jcp.org/jsf/core" 
     xmlns:p="http://primefaces.org/ui"> 
    <f:view> 
    <h:head> 
    </h:head> 
    <h:body> 
     <h:form id="testForm"> 
     <p:commandButton value="Click Me" process="@this" update="@all"/> 
     <p:poll id="myPoll" widgetVar="myPollWidget" interval="5" onstart="console.log('Poll....');" process="@this"/>   
     </h:form> 
    </h:body> 
    </f:view> 
</html> 

我知道,我可以

onclick="if(PrimeFaces.widgets['myPollWidget']){PF('myPollWidget').stop();}" 
在命令按鈕

避免它,通過停止投票。

但是沒有更簡單,更通用的方法來避免這個問題嗎?

+0

有效地,你通過使用update =「@ all'自己介紹這個問題,所以解決方案是:不使用'update =」@ all「'是一個非常好的選擇,但只更新那些需要更新或使用的組件命令按鈕上的'ajax =「false」'(與使用'update =「@ all」'幾乎相同) – Kukeltje

+0

@Kukeltje我使用update =「@ all」,因爲它是我真實項目中的語言選擇器,我想更新整個頁面而不重新加載並丟失視圖範圍 – tak3shi

+0

然後使用codi'@ ViewAccessScope'或您的解決方案 – Kukeltje

回答

0

Primefaces的輪詢組件具有像autoStart和stop類型的布爾值屬性。因此,您可以將這些屬性綁定到bean變量,並使用commandButton的actionListener更改它們。