arya-blue
luna-amber
luna-blue
luna-green
luna-pink
nova-dark
nova-light
saga-blue
vela-blue
Waypoint
Infinite scrolling with p:remoteCommand and offset as function. The offset defines a waypoint if the bottom of the element is in view. When resizing the window, this offset will be recalculated automatically. The Waypoint component self is used in combination with pe:javascript. In the callback function we check the current scrolling direction. Furthermore, we use two widget methods: disable() and enable(). The method disable() temporarily disables the waypoint (callback function) from firing, but leaves the waypoint's event bound. Calling enable() again in the future would re-enables a previously disabled waypoint and the old handlers would continue to work.
Source

<h:panelGroup id="wrapper" layout="block">
    <h1>Infinite scrolling with Waypoint</h1>
    
    <h:panelGroup id="container" layout="block">
        <div class="article">
            <h2>Lorem Ipsum Dolor</h2>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
               Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero
               sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. 
               Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, 
               commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, 
               eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar 
               facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, 
               eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan 
               porttitor, facilisis luctus, metus xyx rtel supepr sey reror.</p>
        </div>
        <div class="article">
            <h2>Sit Amet</h2>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. 
               Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero 
               sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.
               Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. 
               Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero 
               sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. 
               Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero 
               sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.
               Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. 
               Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero 
               sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
        </div>
        <div class="article">
            <h2>Consectetuer Adipiscing Elit</h2>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
               Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed.
               Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
               Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed.
               Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
               Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed.
               Test Consectetuer Adipiscing Elit, consectetuer elit, consectetuer adipiscing.</p>
        </div>
        <div class="article">
            <h2>Aenean</h2>
            <p>Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum
               vulputate, nunc, cbuiewe dyxyxew Assdle upsula quite dsenda webald, Aksuid sind luidd svbnm
               yxcdqw el ijghfdf dklioe otvet nam sendrt Klimprt, second third aplogi beret treidsd ne.
               Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, 
               commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum.</p>
            <p>Aliquam tincidunt mauris eu risus. Donec consectetuer ligula vulputate sem tristique cursus.
               Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate
               sem tristique. Waypoint eu vulputate magna eros eu erat. Aliquam erat volutpat.
               Aliquam tincidunt mauris eu risus. Donec consectetuer ligula vulputate sem tristique cursus.
               Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate
               sem tristique. Waypoint eu vulputate magna eros eu erat. Aliquam erat volutpat.</p>
        </div>
        <div class="article">
            <h2>Vestibulum</h2>
            <p>Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros
               eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus,
               metus sit amet est et sapien ullamcorper pharetra. Aliquam erat volutpat. Nam dui mi, tincidunt
               quis, accumsan porttitor, facilisis luctus. Hello said dkrew qwq ncki juewewe, upsum el.</p>
            <p>Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem
               tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi tri ssev.
               Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem
               tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi tri elektron.
               Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem
               tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi.</p>
        </div>
    </h:panelGroup>
    
    <h:panelGroup id="remoteContent" style="display:none;">
        <ui:include src="#{infiniteScrollController.src}"/>
    </h:panelGroup>        
    
    <p:remoteCommand id="rcom" name="loadRemoteContent" process="@this" update="remoteContent"
                     actionListener="#{infiniteScrollController.toggleSrc}"
                     oncomplete="handleLoadStop()"/>
    
    <p:dialog widgetVar="loadingDlg" resizable="false" showHeader="false">
        <h:panelGrid columns="2">
            <h:graphicImage library="images" name="ajax-loader1.gif"  
                            style="margin-right: 12px; vertical-align: middle;"/>  
            <h:outputText value="Content is loading..." style="white-space: nowrap;"/>
        </h:panelGrid>
    </p:dialog>

    <h:panelGroup id="footer" layout="block">
        <p:separator/>
        Copyright, PrimeFaces Extensions, 2013.
        
        <pe:waypoint id="waypoint" widgetVar="waypointWidget"
                     offset="function(){return $.waypoints('viewportHeight') - $(this).outerHeight()}">
            <pe:javascript event="reached" execute="handleLoadStart(ext);"/>
        </pe:waypoint>
    </h:panelGroup>
</h:panelGroup>

<h:outputScript id="waypointScript" target="body">
/* <![CDATA[ */
    function handleLoadStart(ext) {
        if (ext.direction == "down") {
            PF('waypointWidget').disable();
            PF('loadingDlg').show();
            loadRemoteContent();
        }
    }
    
    function handleLoadStop() {
        $('#container').append($('#remoteContent > div.article'));
        PF('loadingDlg').hide();
        PF('waypointWidget').enable();
    }
/* ]]> */
</h:outputScript>

=== first remote content from the file remoteContentOne.xhmtl (for demo purpose)
                
<div class="article">
    <h2>Vestibulum One</h2>
    <p>Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros
        eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus,
        metus sit amet est et sapien ullamcorper pharetra. Aliquam erat volutpat. Nam dui mi, tincidunt
        quis, accumsan porttitor, facilisis luctus. Hello said dkrew qwq ncki juewewe, upsum el.
        tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi zuuiui gf.</p>
    <p>Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem
        tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi tri ssev.
        Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem
        tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi tri elektron.
        Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem
        tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi.</p>
</div>
                
=== second remote content from the file remoteContentSecond.xhmtl (for demo purpose)
                
<div class="article">
    <h2>Vestibulum Second</h2>
    <p>Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros
        eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus,
        metus sit amet est et sapien ullamcorper pharetra. Aliquam erat volutpat. Nam dui mi, tincidunt
        quis, accumsan porttitor, facilisis luctus. Hello said dkrew qwq ncki juewewe, upsum el.
        tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi zuuiui gf.</p>
    <p>Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem
        tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi tri ssev.
        Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem
        tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi tri elektron.
        Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem
        tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi.</p>
</div>
            
Components and more
Documentation pe:
Attributes (move mouse over the names to see data types)
Name Description
No attributes available for this component.
PrimeFaces Extensions Showcase - © 2011-2025,PrimeFaces: 15.0.13,PrimeFaces Extensions: 15.0.14-SNAPSHOT,JSF: Apache MyFaces JSF-2.3 Core Impl 2.3.10,Server: Apache Tomcat (TomEE)/9.0.82 (8.0.16),Build time: 2026-02-23 00:32