2014-12-05 2 views
0

У меня есть следующая дистанционная команда:Progressbar setInterval с remoteCommand

<p:remoteCommand id="usedCall" 
       name="queryUsed" 
       oncomplete="fetchUsedMemory(#{performanceProvider.queryUsedMemory()})" 
       process="@all" /> 

Это вызывает функцию боба и передает результат функции fetchUsedMemory JS, определенную в блоке сценария. Я хочу выполнить этот remoteCommand каждые 2 секунды до отмены и отобразить результат на ProgressBar. Я пробовал следующее:

function fetchUsedMemory(usedMemory) { 
    var maxValue = jQuery('#TotalMemory').val(); 

    var pbClient = PF('pbClient'); 
    var newValue = usedMemory; 
    var percentg = (newValue/maxValue) * 100; 

    pbClient.setValue(percentg); 

    jQuery('#progressText').val('Max: ' + maxValue + ' NEW: ' + newValue + ' %: ' + percentg); 
} 

Эта функция обновила бы панель прогресса и inputText, чтобы проверить результаты. Тогда функция, которая начинается весь процесс:

function start() { 
    PF('startButton1').disable(); 
    PF('cancelButton1').enable(); 
    window['progress'] = setInterval(queryUsed, 1000); 
} 

Я попытался передать здесь имя из remoteCommand, но это только вызывается раз. Никаких дальнейших звонков в отношении фасоли не поступает. Наконец, вот мой HTML:

<p:panel id="mProgressPanel"> 

     <p:progressBar id="progressBar" widgetVar="pbClient" style="width: 500px;" /> 
     <p:inputText id="progressText" style="display: block; width: 1000px;" /> 

     <f:facet name="footer"> 
      <p:commandButton id="StartProgress" disabled="true" 
          type="button" onclick="start()" 
          value="Start" 
          widgetVar="startButton1" /> 
      <p:commandButton id="StopProgress" disabled="true" 
          type="button" onblur="cancel()" 
          value="Stop" 
          widgetVar="cancelButton1"/> 
     </f:facet> 
    </p:panel> 

Есть ли способ, чтобы заставить его работать так, что setInterval вызывает remoteCommand правильно? Спасибо за помощь!

+0

Вы понимаете, что '# {performanceProvider.queryUsedMemory()}' будет оцениваться только один раз, oncomplete - это просто функция javascript, и передаваемый параметр не будет меняться каждый раз, когда он будет выполнен , –

+0

Что я уже знаю. Вот почему я спросил, как я могу заставить его работать, а не почему это не работает. – Wrath

ответ

0

Вы можете использовать <p:poll>, вот идея

XHTML
<p:poll interval="2" listener="#{performanceProvider.queryUsedMemory()}" 
     oncomplete ="updateMemory(xhr, status, args)" widgetVar="pollWV" 
     process="@this" /> 

ManagedBean

public void queryUsedMemory() { 
    RequestContext.getCurrentInstance().addCallbackParam("memory", getUsedMemory() + 10); 
} 

Javascript

function updateMemory(xhr, status, args) { 
    if(args.memory) { 
     //update what ever you want 

     //Stop polling if the memory is 100 
     if(args.memory === 100) { 
     PF('pollWV').stop(); 
     } 
    } 
} 
+0

Работает отлично! – Wrath

Смежные вопросы