PrimeFaces bug? [Resolvido]

7 respostas
F

Boa tarde pessoal eu estou trabalhado em um página com um timer do primefaces 2 onde o mesmo funciona, clicando em play o p:poll starta clicando em stop o poll para.
O problema é se algum usuário clicar duas vezes no botão de play o botão de stop nunca mais funciona.
No show case do primefaces também tá assim.
Será que é um bug mesmo ou tem como corrigir?

7 Respostas

J

passa o link que vc testou o shocase, pq procurei aqui para testar e não encontrei.

F

Boa tarde jokacwb
O exemplo está em: http://www.primefaces.org/showcase/ui/pollStartStop.jsf

J

É acho q é BUG mesmo, testei na versao 3.0 e da o mesmo problema, o jeito é fazer um paliativo
escondendo o botão start para não permitir que o usuário pressione-o qdo o poll ja estiver ativo

F

Jokacwb seguido sua sugestão fiz com que apenas um botão seja rendered de cada vez

codigo xhtml

<prime:panel id="panel">                                  
          <prime:commandButton id="start" onclick="poll.start();" update="msg, panel" value="Start" ajax="true" image="ui-icon-play" rendered="#{MBean.renderPlay}"/>

          <prime:commandButton id="stop" onclick="poll.stop();" update="msg, panel" value="Stop" ajax="true" image="ui-icon-stop" rendered="#{MBean.renderStop}"/>
</prime:panel>                                
<prime:poll interval="3" update="data" widgetVar="poll" autoStart="false" immediate="true"/>

Porem está abordagem também pode gerar erro pois na fração de tempo que botão leva para desaparece é suficiente para o usuário dar dois clicks e ocasionar o mesmo erro.
Será que há outra solução?

F

Não tem como limitar o numero de clicks em um mesmo botão?

J

vc pode habilitar/desabilitar os botões via javascript e pode mante-los renderizados ± assim:

<head>
<script type="text/javascript">
function doStart() 
{
   document.getElementById('start').disable  = true;
   document.getElementById('stop').disable  = false;
   poll.start();
}
function doStop() 
{
   document.getElementById('start').disable  = false;
   document.getElementById('stop').disable  = true;
   poll.stop();
}
</script>
</head>
<prime:panel id="panel">                                    
          <prime:commandButton id="start" onclick="doStart();" update="msg, panel" value="Start" ajax="true" image="ui-icon-play"/>  
  
          <prime:commandButton id="stop" onclick="doStop();" update="msg, panel" value="Stop" ajax="true" image="ui-icon-stop" />  
</prime:panel>                                  
<prime:poll interval="3" update="data" widgetVar="poll" autoStart="false" immediate="true"/>
F

jokacwb valeu pela ajuda demorei para responder pq tive alguns problemas aqui mas agora ta tudo certo, seguido sua sugestão implementei com javaScript duas funções que desabilitam os botões não necessários e estartar o poll, ficou assim:

<h:head>
     <script type="text/javascript" language="javascript">
           function doStart(){
                document.getElementById("btnstart").disabled = true;
                document.getElementById("btnstop").disabled  = false;
                poll.start();
           }
           function doStop(){
                document.getElementById("btnstart").disabled = false;
                document.getElementById("btnstop").disabled  = true;
                poll.stop();
           }
     </script>
</h:head>
<prime:panel id="panel">
       <prime:commandButton id="btnstart" type="button" value="Start" image="ui-icon-play" onclick="doStart();" update="msg, panel"/>
       <prime:commandButton id="btnstop" type="button" value="Stop" image="ui-icon-pause" onclick="doStop();" update="msg, panel"/>
</prime:panel> 
<prime:poll interval="3" update="data" widgetVar="poll" autoStart="false"/>
Criado 7 de julho de 2011
Ultima resposta 11 de jul. de 2011
Respostas 7
Participantes 2