2013-04-24 2 views
3

На моей странице JSF 2.0 содержатся некоторые данные, которые динамичны, поэтому требуется автоматическое обновление в течение определенного предопределенного интервала времени (скажем, каждые 10 секунд). Я использую PrimeFaces 3.5 в качестве мощного набора компонентов. Ниже управляемый bean-Как регулярно обновлять страницу в jsf2.0?

@ManagedBean 
@ViewScoped 
public Monitor implements Serializable { 

    //max,min,avg,stdDev,reason are caluclated based on some dynamic data 
    private int max; 
    private int min; 
    private double avg; 
    private double stdDev; 
    private String reason; 

    public int getMax() { 
      //Here before returning I am calling some methods to get the max from dynamic data 
     return max; 
    } 

    public int getMin() { 
      //Here before returning I am calling some methods to get the min from dynamic data 
     return min; 
    } 

    public double getAvg() { 
      //Here before returning I am calling some methods to get the avg from dynamic data 
     return avg; 
    } 

    public String getReason() { 
      //Here before returning I am calling some methods to get the reason from dynamic data 
     return reason; 
    } 

    public double getStdDev() { 
      //Here before returning I am calling some methods to get the stdDev from dynamic data 
     return stdDev; 
    } 

    public void setMax(int max) { 
     this.max = max; 
    } 

    public void setMin(int min) { 
     this.min = min; 
    } 

    public void setAvg(double avg) { 
     this.avg = avg; 
    } 

    public void setStdDev(double stdDev) { 
     this.stdDev = stdDev; 
    } 

    public void setReason(String reason) { 
     this.reason = reason; 
    } 
} 

Я не завершить макет до сих пор, однако я бы как this-

<!DOCTYPE html> 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <title>Insert title here</title> 
    </h:head> 
    <h:body> 
     <p:panel> 
      <h:outputLabel value="#{monitor.min}" /> 
      <h:outputLabel value="#{monitor.max}" /> 
      <h:outputLabel value="#{monitor.avg}" /> 
      <h:outputLabel value="#{monitor.stdDev}" /> 
      <h:outputLabel value="#{monitor.reason}" /> 
     </p:panel> 
    </h:body> 
</html> 

Как я могу обновить страницу регулярно в JSF 2.0?

+0

Вы пытаетесь ** Опрос **: HTTP: //www.primefaces.org/showcase/ui/poll.jsf –

+0

@RongNK: Могу ли я получить условное обновление? Я имею в виду, скажем, когда avg больше 50. Я хочу остановить этот процесс обновления и просто хочу показать другую страницу. –

+2

Вы можете, опрос может остановить и начать. –

ответ

2

Вы можете использовать Poll для автоматического обновления страницы, Опрос может начать остановку с помощью JavaScript: , например, опрос останавливается, когда счетчик (переменная боб)> = 10: Вы можете использовать остановить как @Ravi post, в моем примере демо вы можете начать остановку (через: pol.stop() и pol.start()).

Facelets:

<h:form id="form"> 
      <p:panel id="pntest"> 
       // content here 
      </p:panel> 
      <h:outputText id="txt_count" value="#{tabview.count}" /> 
      <p:poll interval="1" listener="#{tabview.increment}" update="txt_count" widgetVar="pol" oncomplete="test(xhr, status, args);"/> 
      <script type="text/javascript"> 
       //<![CDATA[ 
       function test(xhr, status, args){ 
        if(args.sotest >= 10){ 
         pol.stop(); 
        }else{ 
         location.reload(); // refresh page       
        } 
       } 
       //]]> 
      </script> 
     </h:form> 

Бобовые:

 private int count = 0; 
     public void increment() { 
       count++; 
       RequestContext reqCtx = RequestContext.getCurrentInstance(); 
       reqCtx.addCallbackParam("sotest", count); 
       //1. update by using PrimeFaces specific API, use [RequestContext#update()][3]. 
       RequestContext.getCurrentInstance().update("form:pntest"); 
       //2. update by using standard JSF API, add the client ID to [PartialViewContext#getRenderIds()][4].    

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("form:pntest"); 
      } 

      public int getCount() { 
       return this.count; 
      } 

      public void setCount(int count) { 
       this.count = count; 
      } 
+0

Я понял. Еще один вопрос. Могу ли я использовать опрос с помощью 'p: panelGrid'? Я имею в виду, могу ли я обновить все 'p: panelGrid', используя' p: poll'? –

+0

Я обновил свой ответ, вы можете обновить панель с помощью бэкбона через два подхода (вы выбираете один из двух подходов). –

+0

Это отличный человек ... Большое спасибо за помощь .. –

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