Locale

Change the locale of the datepicker, schedule and client side validation messages.

Language
English
French
German
Italian
Korean
Spanish
Catalan
Dutch
Portuguese
Portuguese
Arabic
Czech
Greek
Persian
Hindi
Indonesian
Croatian
Japanese
Hungarian
Hebrew
Georgian
Lithuanian
Latvian
Norwegian
Polish
Romanian
Russian
Slovak
Slovenian
Serbian
Swedish
Turkish
Ukrainian
Vietnamese
Chinese
Chinese

Input Style

Free Themes

Built-in component themes created by the PrimeFaces Theme Designer.

PrimeOne Design

Saga Saga
Vela Vela
Arya Arya

Premium Themes

Premium themes are only available exclusively for PrimeFaces Theme Designer subscribers and therefore not included in PrimeFaces core.

Bootstrap light blue and dark blue themes are also included in PrimeFaces 10.x builds for Elite subscribers.

bootstrap4-blue-light Bootstrap Blue
bootstrap4-purple-light Bootstrap Purple
bootstrap4-blue-dark Bootstrap Blue
bootstrap4-purple-dark Bootstrap Purple

Legacy Free Themes

Luna Amber Luna Amber
Luna Blue Luna Blue
Luna Green Luna Green
Luna Pink Luna Pink
Nova Nova
Nova Nova Alt
Nova Nova Accent

PREMIUM TEMPLATES

Create awesome applications in no time using the premium templates and impress your users.

DataTable Scroll

Both vertical and horizontal scrolling of the data is supported with optional frozen rows-columns and on-demand loading features.

Vertical
NameCountryRepresentativeStatus
Izzy J MorascaJapanOnyama Limba UNQUALIFIED
Emily A CaldareraIndiaAmy Elsner NEW
Jeanfrancois M NestleCanadaAmy Elsner RENEWAL
Smith V PerinItalyAmy Elsner RENEWAL
Octavia L PoquetteGermanyAmy Elsner NEW
Morrow Z IturbideJapanBernardo Dominic NEGOTIATION
Mayumi B MacleadAustraliaAmy Elsner PROPOSAL
Ivar P KuskoArgentinaIoni Bowcher PROPOSAL
Mayumi A BowleyFranceBernardo Dominic RENEWAL
Juan L SaylorsIndiaAsiya Javayant NEW
Octavia V IturbideCanadaElwin Sharvill NEGOTIATION
Octavia F NickaRussiaAsiya Javayant QUALIFIED
Costa T GarufiUnited KingdomAnna Fali PROPOSAL
Nicolas B AlbaresFranceXuxue Feng UNQUALIFIED
Sinclair K SlusarskiIndiaOnyama Limba NEGOTIATION
Rodrigues W RutaItalyOnyama Limba UNQUALIFIED
Maria Y MacleadBrazilAmy Elsner NEGOTIATION
Jennifer V OldroydFranceOnyama Limba NEW
Silvio V AmigonIndiaElwin Sharvill QUALIFIED
Darci D SchemmerBrazilOnyama Limba NEGOTIATION
Izzy M MarrierIndiaAsiya Javayant RENEWAL
Adams G RimUnited KingdomIvan Magalhaes PROPOSAL
Izzy S MacleadBrazilStephen Shaw NEW
Tony X VenereFranceElwin Sharvill QUALIFIED
Costa M CaudyItalyIvan Magalhaes PROPOSAL
Stacey E SergiSpainBernardo Dominic NEGOTIATION
Rodrigues K AmigonFranceAmy Elsner UNQUALIFIED
Deepesh X OldroydAustraliaStephen Shaw NEGOTIATION
Deepesh R MacleadBrazilOnyama Limba RENEWAL
Nicolas N CampainItalyXuxue Feng RENEWAL
Emily K PerinBrazilOnyama Limba QUALIFIED
Ivar L RoysterItalyAmy Elsner UNQUALIFIED
Julie R FerenczUnited KingdomIoni Bowcher UNQUALIFIED
Nicolas C KolmetzJapanStephen Shaw RENEWAL
Adams O CaudySpainIvan Magalhaes NEGOTIATION
Stacey X MaletAustraliaIoni Bowcher RENEWAL
Rodrigues Y BologniaJapanOnyama Limba QUALIFIED
Misaki U WaycottGermanyOnyama Limba UNQUALIFIED
Costa E SaylorsJapanElwin Sharvill NEGOTIATION
Clifford W SchemmerCanadaStephen Shaw QUALIFIED
Octavia L ButtArgentinaIvan Magalhaes UNQUALIFIED
Morrow E MarrierArgentinaBernardo Dominic UNQUALIFIED
Francesco W GlickJapanAnna Fali RENEWAL
Greenwood Q CaldareraIndiaAmy Elsner QUALIFIED
Wickens G RimBrazilElwin Sharvill NEW
Misaki K RoysterJapanIvan Magalhaes NEGOTIATION
Aditya T VocelkaItalyBernardo Dominic NEGOTIATION
Alejandro E MarrierAustraliaAnna Fali UNQUALIFIED
Antonio M ButtGermanyOnyama Limba PROPOSAL
Alejandro L OldroydGermanyBernardo Dominic NEW
Horizontal
NameCountryRepresentativeStatus
Chavez X AlbaresAustraliaBernardo Dominic PROPOSAL
James F PerinIndiaAmy Elsner RENEWAL
Arvin G CaudyUnited KingdomAnna Fali QUALIFIED
Morrow M GarufiSpainAnna Fali RENEWAL
Salvatore Q DilliardJapanAsiya Javayant QUALIFIED
Alejandro R TollnerItalyIvan Magalhaes RENEWAL
Emily T VocelkaFranceAsiya Javayant NEW
Tony R StockhamAustraliaOnyama Limba QUALIFIED
Alejandro X ShinkoBrazilXuxue Feng UNQUALIFIED
Antonio M MaletCanadaBernardo Dominic QUALIFIED
Horizontal and Vertical
IdNameCountryDateCompanyStatusActivityRepresentative
1000Faith W CampainCanada2024-04-17Chanay, Jeffrey A Esq NEGOTIATION88Anna Fali
1001Jefferson G SchemmerUnited Kingdom2024-04-02King, Christopher A Esq NEGOTIATION72Onyama Limba
1002Juan M StockhamSpain2024-04-11Chapman, Ross E Esq QUALIFIED67Anna Fali
1003Misaki S MaletJapan2024-04-09Rangoni Of Florence QUALIFIED23Ivan Magalhaes
1004Jeanfrancois P VenereAustralia2024-04-13Rousseaux, Michael Esq NEW94Elwin Sharvill
1005Adams C WieserUnited Kingdom2024-04-16Chapman, Ross E Esq NEW98Elwin Sharvill
1006Claire D RimCanada2024-03-29Printing Dimensions NEGOTIATION13Asiya Javayant
1007Aika M RutaRussia2024-04-15Buckley Miller Wright UNQUALIFIED90Stephen Shaw
1008Jeanfrancois H FigeroaItaly2024-04-09Rousseaux, Michael Esq UNQUALIFIED97Elwin Sharvill
1009Darci R InouyeFrance2024-04-14Benton, John B Jr NEGOTIATION82Ioni Bowcher
1010Stacey X GarufiAustralia2024-04-19Feltz Printing Service QUALIFIED26Xuxue Feng
1011Francesco G ShinkoArgentina2024-04-21Buckley Miller Wright UNQUALIFIED25Elwin Sharvill
1012Darci S OstroskyFrance2024-04-12Morlong Associates QUALIFIED99Ioni Bowcher
1013Octavia A GlickItaly2024-04-10Feltz Printing Service PROPOSAL41Amy Elsner
1014Faith E KuskoArgentina2024-04-12Chemel, James L Cpa PROPOSAL21Xuxue Feng
1015Misaki K PerinAustralia2024-04-11King, Christopher A Esq NEGOTIATION72Onyama Limba
1016Juan X VenereUnited Kingdom2024-04-25King, Christopher A Esq UNQUALIFIED65Bernardo Dominic
1017Juan G MaletJapan2024-04-17Rangoni Of Florence PROPOSAL92Onyama Limba
1018James M MaletAustralia2024-04-22Truhlar And Truhlar Attys RENEWAL54Anna Fali
1019Octavia T RulapaughArgentina2024-04-02Dorl, James J Esq QUALIFIED5Ivan Magalhaes
1020Juan Z GlickUnited Kingdom2024-04-21Dorl, James J Esq UNQUALIFIED96Bernardo Dominic
1021David J MaletRussia2024-04-07Rangoni Of Florence UNQUALIFIED88Bernardo Dominic
1022Alejandro E IturbideJapan2024-03-29Chanay, Jeffrey A Esq UNQUALIFIED69Xuxue Feng
1023Izzy H PoquetteIndia2024-03-30Truhlar And Truhlar Attys QUALIFIED38Onyama Limba
1024Alejandro C DilliardSpain2024-04-25Feiner Bros NEW52Anna Fali
1025David Q AlbaresUnited Kingdom2024-04-17Benton, John B Jr RENEWAL79Onyama Limba
1026Alejandro Z OstroskyJapan2024-04-26Chemel, James L Cpa QUALIFIED77Bernardo Dominic
1027Johnson Y InouyeRussia2024-04-27Feltz Printing Service UNQUALIFIED0Xuxue Feng
1028Jeanfrancois O CaldareraSpain2024-04-16Buckley Miller Wright NEW88Amy Elsner
1029Cody F StensethFrance2024-04-01Printing Dimensions PROPOSAL11Onyama Limba
1030Julie W GillianGermany2024-04-17Commercial Press NEGOTIATION36Asiya Javayant
1031Aika L MaletJapan2024-04-21Chemel, James L Cpa QUALIFIED88Stephen Shaw
1032Izzy M GillianFrance2024-04-23King, Christopher A Esq PROPOSAL66Xuxue Feng
1033Juan K MacleadJapan2024-04-17Printing Dimensions NEW28Ioni Bowcher
1034Mujtaba N AlbaresJapan2024-04-13Commercial Press RENEWAL89Ivan Magalhaes
1035Ricardo H OldroydFrance2024-03-31Chemel, James L Cpa UNQUALIFIED7Bernardo Dominic
1036Greenwood I CaldareraCanada2024-04-17Chemel, James L Cpa PROPOSAL47Onyama Limba
1037Aditya M OstroskyCanada2024-04-26Chanay, Jeffrey A Esq QUALIFIED4Ioni Bowcher
1038Antonio H FlosiIndia2024-03-30Buckley Miller Wright QUALIFIED10Amy Elsner
1039Sinclair Q DoeJapan2024-04-05Morlong Associates UNQUALIFIED67Amy Elsner
1040Claire M DarakjyIndia2024-03-29Truhlar And Truhlar Attys RENEWAL82Ivan Magalhaes
1041Juan M FerenczUnited Kingdom2024-04-11Dorl, James J Esq QUALIFIED15Anna Fali
1042Octavia A FigeroaJapan2024-03-31Rangoni Of Florence NEW45Asiya Javayant
1043Tony N WhobreyArgentina2024-04-01Feiner Bros NEGOTIATION30Ivan Magalhaes
1044Kadeem N DoeCanada2024-04-05Chapman, Ross E Esq NEW45Asiya Javayant
1045Mayumi V AmigonBrazil2024-04-27Buckley Miller Wright PROPOSAL56Anna Fali
1046Salvatore P DarakjyArgentina2024-04-15Rousseaux, Michael Esq UNQUALIFIED88Ioni Bowcher
1047Tony P WieserGermany2024-04-21Rangoni Of Florence NEGOTIATION15Onyama Limba
1048Kaitlin Z SergiItaly2024-04-18Rangoni Of Florence UNQUALIFIED99Xuxue Feng
1049Johnson G SchemmerBrazil2024-04-09Feiner Bros UNQUALIFIED48Amy Elsner
Frozen Rows
NameCountryRepresentativeStatus
Ashley N BriddickArgentinaElwin Sharvill NEW
Ivar P RoysterJapanAsiya Javayant UNQUALIFIED
Sinclair Q RutaGermanyBernardo Dominic PROPOSAL
Octavia S OstroskyRussiaXuxue Feng QUALIFIED
Deepesh T SchemmerSpainElwin Sharvill RENEWAL
Isabel W RoysterIndiaStephen Shaw NEW
Aika I ShinkoSpainOnyama Limba UNQUALIFIED
Antonio J ButtRussiaStephen Shaw RENEWAL
Juan J InouyeArgentinaAmy Elsner NEW
Aditya F KolmetzGermanyAsiya Javayant UNQUALIFIED
Ashley F IturbideJapanAnna Fali PROPOSAL
Silvio X CampainGermanyAnna Fali QUALIFIED
Kaitlin U GauchoGermanyAmy Elsner PROPOSAL
Octavia M RimIndiaStephen Shaw QUALIFIED
Faith N GauchoGermanyStephen Shaw RENEWAL
Kaitlin F OstroskyJapanStephen Shaw PROPOSAL
Isabel T PerinItalyAsiya Javayant RENEWAL
Antonio L WieserJapanBernardo Dominic NEGOTIATION
Nicolas K SaylorsGermanyIoni Bowcher RENEWAL
Aruna K VenereBrazilIoni Bowcher NEW
Antonio J DilliardFranceIvan Magalhaes UNQUALIFIED
Adams U IturbideSpainElwin Sharvill PROPOSAL
Chavez O KolmetzGermanyElwin Sharvill NEGOTIATION
Isabel C SergiItalyStephen Shaw RENEWAL
Darci H KuskoAustraliaIoni Bowcher NEGOTIATION
Aditya J CampainIndiaAmy Elsner QUALIFIED
Ricardo K ChuiBrazilOnyama Limba RENEWAL
Jefferson F OldroydAustraliaElwin Sharvill NEW
Maisha L RulapaughCanadaIvan Magalhaes QUALIFIED
Johnson U RimRussiaIoni Bowcher UNQUALIFIED
Costa C RoysterGermanyXuxue Feng NEGOTIATION
Leja J TollnerArgentinaElwin Sharvill NEW
Adams M CaldareraUnited KingdomIvan Magalhaes RENEWAL
Jeanfrancois R KuskoBrazilAnna Fali QUALIFIED
Smith C VenereFranceOnyama Limba RENEWAL
Maria W NickaSpainIoni Bowcher NEGOTIATION
Morrow T RoysterCanadaXuxue Feng NEGOTIATION
Jones T BowleyBrazilXuxue Feng UNQUALIFIED
Wickens E KuskoAustraliaElwin Sharvill NEGOTIATION
Ashley J VocelkaIndiaAnna Fali UNQUALIFIED
Kaitlin L KuskoCanadaIvan Magalhaes PROPOSAL
Mayumi Q AlbaresBrazilXuxue Feng PROPOSAL
Nicolas N WieserAustraliaIvan Magalhaes UNQUALIFIED
Isabel U MarrierItalyStephen Shaw PROPOSAL
Sinclair F InouyeUnited KingdomElwin Sharvill QUALIFIED
Leja P CaldareraRussiaXuxue Feng QUALIFIED
Misaki F MorascaRussiaStephen Shaw UNQUALIFIED
Mujtaba K ShinkoCanadaOnyama Limba QUALIFIED
Costa P StensethGermanyOnyama Limba QUALIFIED
Adams U CaudyRussiaAmy Elsner PROPOSAL
Frozen Columns
Name
Murillo C Saylors
Chavez E Campain
Wickens Q Rulapaugh
Sinclair L Dilliard
Chavez N Schemmer
Adams L Poquette
Cody X Caudy
Adams B Malet
Julie M Kusko
Smith B Paprocki
Salvatore Z Shinko
Kadeem M Saylors
Ivar X Paprocki
Faith S Saylors
Misaki H Campain
Stacey G Maclead
Maria C Doe
Izzy Z Figeroa
Cody G Marrier
Kadeem C Whobrey
Octavia R Ferencz
Johnson P Gillian
Smith C Saylors
Adams S Morasca
Smith Q Caudy
Costa B Glick
Jeanfrancois L Iturbide
Juan I Stockham
Misaki R Malet
Clifford E Gillian
Maria N Tollner
Faith V Whobrey
Deepesh U Kolmetz
Kaitlin Y Doe
Francesco U Malet
James K Gaucho
Nicolas A Chui
Isabel S Wieser
Jones P Saylors
Ricardo E Stenseth
Rodrigues R Bolognia
Ivar S Iturbide
Morrow V Gaucho
Kadeem Y Whobrey
Clifford C Darakjy
Izzy F Schemmer
Misaki C Saylors
Adams E Nicka
Mujtaba U Stenseth
Smith Z Malet
IdCountryDate
1000United Kingdom2024-04-18
1001France2024-03-30
1002Australia2024-04-11
1003Canada2024-04-10
1004United Kingdom2024-04-07
1005Australia2024-04-02
1006Brazil2024-04-06
1007Australia2024-04-18
1008Spain2024-03-30
1009Canada2024-04-04
1010Spain2024-04-08
1011Canada2024-04-20
1012Japan2024-04-20
1013Russia2024-03-30
1014Australia2024-03-30
1015Canada2024-04-23
1016India2024-04-16
1017France2024-04-26
1018Australia2024-04-12
1019Russia2024-03-30
1020Brazil2024-04-25
1021Australia2024-04-01
1022Canada2024-04-06
1023Italy2024-04-21
1024United Kingdom2024-04-27
1025Brazil2024-04-21
1026Japan2024-04-08
1027Brazil2024-04-14
1028Canada2024-03-31
1029Australia2024-04-06
1030Japan2024-04-02
1031Argentina2024-04-11
1032Germany2024-04-03
1033Brazil2024-04-05
1034Brazil2024-04-13
1035Germany2024-04-10
1036Canada2024-04-22
1037Spain2024-04-10
1038Australia2024-04-09
1039India2024-04-26
1040Canada2024-04-01
1041France2024-04-10
1042United Kingdom2024-03-31
1043Spain2024-03-31
1044Brazil2024-04-08
1045Australia2024-04-16
1046Argentina2024-04-01
1047Spain2024-04-04
1048Canada2024-04-12
1049Canada2024-03-30

On-Demand Data

NameIdCountryDate
Nicolas K Figeroa1000United Kingdom2024-04-07
Ivar A Ferencz1001Australia2024-04-24
Octavia E Venere1002Germany2024-04-15
Ashley R Gillian1003Germany2024-04-08
Isabel B Whobrey1004France2024-04-08
Isabel Z Stockham1005Russia2024-04-05
Deepesh Q Albares1006Japan2024-04-13
Salvatore L Bolognia1007United Kingdom2024-04-15
Jefferson F Waycott1008Argentina2024-04-23
Leon H Bowley1009Argentina2024-04-25
James L Gaucho1010Canada2024-03-29
Aika N Caldarera1011Russia2024-04-18
Izzy I Ostrosky1012Russia2024-04-27
Costa J Caudy1013Japan2024-04-05
Misaki W Sergi1014Japan2024-04-10
Aditya P Albares1015United Kingdom2024-04-12
Aruna T Royster1016Italy2024-04-09
Maisha D Amigon1017United Kingdom2024-04-26
Kadeem O Caldarera1018Italy2024-03-31
Maisha Q Rulapaugh1019India2024-04-15
Virtual Scrolling - 20000 Rows
NameCountryRepresentativeStatus
Claire C KolmetzRussiaOnyama Limba NEW
Rodrigues T BriddickCanadaBernardo Dominic RENEWAL
Emily Y MacleadSpainStephen Shaw PROPOSAL
Jones R BriddickItalyStephen Shaw RENEWAL
Ricardo W CaudyFranceIvan Magalhaes UNQUALIFIED
Aika L DarakjyGermanyAmy Elsner UNQUALIFIED
Wickens B TollnerCanadaXuxue Feng RENEWAL
Aruna H MaletGermanyAmy Elsner RENEWAL
Nicolas O KuskoGermanyElwin Sharvill PROPOSAL
Morrow F PerinUnited KingdomIoni Bowcher UNQUALIFIED
Antonio V NestleRussiaElwin Sharvill RENEWAL
Francesco J TollnerItalyElwin Sharvill NEGOTIATION
Claire L KuskoAustraliaIvan Magalhaes PROPOSAL
Arvin C SergiIndiaXuxue Feng PROPOSAL
Wickens S CaldareraIndiaAsiya Javayant UNQUALIFIED
Silvio Q GlickCanadaBernardo Dominic QUALIFIED
Francesco O ShinkoCanadaAsiya Javayant NEGOTIATION
Chavez D MorascaBrazilStephen Shaw RENEWAL
Chavez X ShinkoCanadaAsiya Javayant UNQUALIFIED
Jones K DarakjyBrazilOnyama Limba UNQUALIFIED
Costa K PerinSpainXuxue Feng UNQUALIFIED
Rodrigues Y FlosiBrazilElwin Sharvill PROPOSAL
Clifford R SchemmerBrazilIoni Bowcher RENEWAL
Maria D WieserFranceBernardo Dominic NEW
Jennifer A RulapaughIndiaAnna Fali QUALIFIED
Munro W OldroydItalyAnna Fali UNQUALIFIED
Maisha U MorascaCanadaIoni Bowcher PROPOSAL
Alejandro B AlbaresUnited KingdomAsiya Javayant RENEWAL
Alejandro H OldroydGermanyBernardo Dominic NEW
David R PaprockiRussiaAmy Elsner NEW
Julie I FlosiBrazilXuxue Feng UNQUALIFIED
James I KuskoBrazilBernardo Dominic UNQUALIFIED
Jennifer Y BologniaIndiaElwin Sharvill QUALIFIED
Darci A FlosiGermanyOnyama Limba NEW
Deepesh C WhobreyCanadaAnna Fali UNQUALIFIED
Emily T PerinRussiaAsiya Javayant PROPOSAL
Nicolas T ButtItalyIoni Bowcher PROPOSAL
Francesco T FlosiIndiaAsiya Javayant NEW
Ivar P DarakjyJapanOnyama Limba QUALIFIED
Costa D KolmetzFranceAsiya Javayant UNQUALIFIED

<style>
    .ui-datatable-frozenlayout-left {
        width: 20%;
    }

    .ui-datatable-frozenlayout-right {
        width: 80%;
    }
</style>


<h:form>
    <div class="card">
        <h5 style="margin-top:0">Vertical</h5>
        <p:dataTable var="customer" value="#{dtScrollView.customers1}" scrollable="true" scrollHeight="250">
            <p:column headerText="Name" footerText="Name">
                <h:outputText value="#{customer.name}"/>
            </p:column>
            <p:column headerText="Country" footerText="Country">
                <h:outputText value="#{customer.country}"/>
            </p:column>
            <p:column headerText="Representative" footerText="Representative">
                <h:outputText value="#{customer.representative.name}"/>
            </p:column>
            <p:column headerText="Status" footerText="Status">
                <span class="customer-badge status-#{customer.status.name().toLowerCase()}">#{customer.status}</span>
            </p:column>
        </p:dataTable>
    </div>

    <div class="card">
        <h5>Horizontal</h5>
        <p:dataTable var="customer" value="#{dtScrollView.customers2}" scrollable="true" scrollWidth="600">
            <p:column headerText="Name" footerText="Name">
                <h:outputText value="#{customer.name}"/>
            </p:column>
            <p:column headerText="Country" footerText="Country">
                <h:outputText value="#{customer.country}"/>
            </p:column>
            <p:column headerText="Representative" footerText="Representative">
                <h:outputText value="#{customer.representative.name}"/>
            </p:column>
            <p:column headerText="Status" footerText="Status">
                <span class="customer-badge status-#{customer.status.name().toLowerCase()}">#{customer.status}</span>
            </p:column>
        </p:dataTable>
    </div>

    <div class="card">
        <h5>Horizontal and Vertical</h5>
        <p:dataTable var="customer" value="#{dtScrollView.customers3}" scrollable="true" scrollWidth="50%" scrollHeight="250">
            <p:column headerText="Id" footerText="Id">
                <h:outputText value="#{customer.id}"/>
            </p:column>
            <p:column headerText="Name" footerText="Name">
                <h:outputText value="#{customer.name}"/>
            </p:column>
            <p:column headerText="Country" footerText="Country">
                <h:outputText value="#{customer.country}"/>
            </p:column>
            <p:column headerText="Date" footerText="Date">
                <h:outputText value="#{customer.date}"/>
            </p:column>
            <p:column headerText="Company" footerText="Company">
                <h:outputText value="#{customer.company}"/>
            </p:column>
            <p:column headerText="Status" footerText="Status">
                <span class="customer-badge status-#{customer.status.name().toLowerCase()}">#{customer.status}</span>
            </p:column>
            <p:column headerText="Activity" footerText="Activity">
                <h:outputText value="#{customer.activity}"/>
            </p:column>
            <p:column headerText="Representative" footerText="Representative">
                <h:outputText value="#{customer.representative.name}"/>
            </p:column>
        </p:dataTable>
    </div>

    <div class="card">
        <h5>Frozen Rows</h5>
        <p:dataTable var="customer" value="#{dtScrollView.customers4}" scrollable="true" scrollHeight="250"
                     frozenRows="2">
            <p:column headerText="Name" footerText="Name">
                <h:outputText value="#{customer.name}"/>
            </p:column>
            <p:column headerText="Country" footerText="Country">
                <h:outputText value="#{customer.country}"/>
            </p:column>
            <p:column headerText="Representative" footerText="Representative">
                <h:outputText value="#{customer.representative.name}"/>
            </p:column>
            <p:column headerText="Status" footerText="Status">
                <span class="customer-badge status-#{customer.status.name().toLowerCase()}">#{customer.status}</span>
            </p:column>
        </p:dataTable>
    </div>

    <div class="card">
        <h5>Frozen Columns</h5>
        <p:dataTable var="customer" value="#{dtScrollView.customers5}" scrollable="true" scrollHeight="250"
                     scrollWidth="300" frozenColumns="1">
            <p:column headerText="Name" footerText="Name">
                <h:outputText value="#{customer.name}"/>
            </p:column>
            <p:column headerText="Id" footerText="Id">
                <h:outputText value="#{customer.id}"/>
            </p:column>
            <p:column headerText="Country" footerText="Country">
                <h:outputText value="#{customer.country}"/>
            </p:column>
            <p:column headerText="Date" footerText="Date">
                <h:outputText value="#{customer.date}"/>
            </p:column>
        </p:dataTable>
    </div>

    <div class="card">
        <h3>On-Demand Data</h3>
        <p:dataTable var="customer" value="#{dtScrollView.customers6}" scrollRows="20" scrollable="true" liveScroll="true" scrollHeight="150">
            <p:column headerText="Name" footerText="Name">
                <h:outputText value="#{customer.name}"/>
            </p:column>
            <p:column headerText="Id" footerText="Id">
                <h:outputText value="#{customer.id}"/>
            </p:column>
            <p:column headerText="Country" footerText="Country">
                <h:outputText value="#{customer.country}"/>
            </p:column>
            <p:column headerText="Date" footerText="Date">
                <h:outputText value="#{customer.date}"/>
            </p:column>
        </p:dataTable>
    </div>

    <div class="card">
        <h5>Virtual Scrolling - 20000 Rows</h5>
        <p:dataTable var="customer" value="#{dtScrollView.lazyModel}" scrollRows="20" scrollable="true"
                     virtualScroll="true" scrollHeight="200" rows="40" style="margin-bottom:0">
            <p:column headerText="Name" footerText="Name">
                <h:outputText value="#{customer.name}"/>
            </p:column>
            <p:column headerText="Country" footerText="Country">
                <h:outputText value="#{customer.country}"/>
            </p:column>
            <p:column headerText="Representative" footerText="Representative">
                <h:outputText value="#{customer.representative.name}"/>
            </p:column>
            <p:column headerText="Status" footerText="Status">
                <span class="customer-badge status-#{customer.status.name().toLowerCase()}">#{customer.status}</span>
            </p:column>
        </p:dataTable>
    </div>

</h:form>