Neerajkumar
Neerajkumar

Reputation: 398

How to do conditional polling in primefaces?

I want to do conditional Polling in Primefaces (Version:6.0.0).

Here is the polling code:

<p:poll  interval="20" update="liveChart,chrtTC_Cnt_Status,chrtStatus" />

For Example, I am field call Status. If status value is 'In-Progress' then only polling should start. Or else it should not do polling.

Here is my field code, if this value changed to 'In-Progress' then polling should start or else not

<p:outputLabel value="Status:" />
<p:outputLabel id="lblCurrentStatus" value="#{backingBean.status}" />

Here is my Xhtml code

<h:panelGrid columns="2" width="400">

                    <p:outputLabel for="lblStudentName" value="Select Other StudentName: " />
                    <p:selectOneMenu id="lblStudentName" style="width:250px" 
                        value="#{backingBean.selectedStudent}"
                        panelStyle="width:180px" effect="fade" filter="true"
                        filterMatchMode="startsWith">
                        <f:selectItem itemLabel="Select One" itemValue=""
                            noSelectionOption="true" />
                        <f:selectItems value="#{backingBean.studentItemList}" />
                        <p:ajax
                            listener="#{backingBean.OnChangeOtherStudentDropDown}"
                            update=":idForm:tabStatus:p1,:idForm:tabStatus:p4,growl"
                            process="@form" />
                    </p:selectOneMenu>


                <p:tabView id="tabStatus">
            <p:tab title="Status" id="idStatusTab">
                <h:panelGrid columns="3" cellpadding="10" id="p1">
                    <p:growl id="growl" showDetail="true" />
                    <p:ajaxStatus onstart="PF('statusDialog').show()"
                        onsuccess="PF('statusDialog').hide()" />

                    <p:dialog widgetVar="statusDialog" draggable="false"
                        closable="false" resizable="false" showHeader="false">
                        <h:graphicImage value="/images/ajax-loader.gif" />
                    </p:dialog>
                    <h:panelGrid columns="2" cellpadding="5" id="p2">
                        <p:outputLabel value="Failed:" />
                        <p:outputLabel id="lblCurrentFailed"
                            value="#{backingBean.intCurrentFailedStudent}" />
                        <p:outputLabel value="Processed:" />
                        <p:outputLabel id="lblCurrentProcess"
                            value="#{backingBean.intCurrentPassedStudent}" />
                        <p:outputLabel value="Status:" />
                        <p:outputLabel id="lblCurrentStatus"
                            value="#{backingBean.status}" />

                    </h:panelGrid>
                    <h:panelGrid columns="2" cellpadding="10" id="p3">

                        <p:chart type="pie" model="#{backingBean.pieModel1}"
                            rendered="#{not empty backingBean.pieModel1}"
                            id="chrtStatus" style="width:300px;height:200px">
                        </p:chart>
                        <br />
                    </h:panelGrid>
                </h:panelGrid>


                <h:panelGrid columns="3" cellpadding="10" id="p4">

                <p:poll  interval="20" update="liveChart,chrtTC_Cnt_Status,chrtStatus" />
                    <p:chart type="line"
                        model="#{backingBean.lineCurrentLineChart}" 
                        rendered="#{not empty backingBean.lineCurrentLineChart}"
                        id="liveChart" style="height:500px;width:500px" />


                    <p:chart type="bar"
                        model="#{backingBean.barStatusCountStudent}"
                        rendered="#{not empty backingBean.barStatusCountStudent}"
                        id="chrtTC_Cnt_Status" style="width:500px;height:500px">
                         <p:ajax event="itemSelect" listener="#{backingBean.itemSelect}"  />
                    </p:chart>
                </h:panelGrid>
            </p:tab>

        </p:tabView>
</h:form>

Upvotes: 2

Views: 5327

Answers (2)

Parkash Kumar
Parkash Kumar

Reputation: 4730

Solution 1:
Wrap your p:poll within h:panelGroup or h:panelGrid, set rendered="#{backingBean.status eq 'In-Progress'}" on panel and update panel on changing of status, that will reset your polling.

Solution 2:
If you want to manually start and stop the polling then you need to set autoStart="false" and add widgetVar="statusPoll" attributes on p:poll and by invoking PF('statusPoll').start(); and PF('statusPoll').stop(); on changing the value of status field.

Upvotes: 3

Neerajkumar
Neerajkumar

Reputation: 398

It is working,

<h:panelGrid columns="1" id="ID_polling" rendered="#{BackingBean.status eq 'In-Progress'}">    
          <p:poll  interval="20" update="liveChart,chrtTC_Cnt_Status,chrtStatus" />    
</h:panelGrid>

When I write this Panel, Panel will display only when status = 'In-Progress' or else it will not display.

Thank you again,

Upvotes: 0

Related Questions