arya-blue
luna-amber
luna-blue
luna-green
luna-pink
nova-dark
nova-light
saga-blue
vela-blue
MasterDetail
Wizard-like navigation with form fields. Header facet allows to render any content above navigation and footer facet allows to render any content below. Content of header / footer facet is shared between levels. This feature makes possible to show any custom title bar indicating current flow instead of built-in breadcrumbs.
PersonalAddressContactConfirmation
Personal Details
Firstname: *
Lastname: *
Age:
Source

<pe:masterDetail id="masterDetail" level="#{wizardMasterDetailController.currentLevel}" showBreadcrumb="false">
    <f:facet name="header">
        <p:messages showDetail="true"/>
        <h:panelGroup layout="block" style="margin-top: 10px;">
            <h:panelGroup styleClass="levelTitle ui-state-default ui-corner-all
                                  #{wizardMasterDetailController.currentLevel eq 1 ? 'ui-state-hover' : ''}">
                <h:outputText value="Personal"/>
            </h:panelGroup>
            <h:panelGroup styleClass="levelTitle ui-state-default ui-corner-all
                                  #{wizardMasterDetailController.currentLevel eq 2 ? 'ui-state-hover' : ''}">
                <h:outputText value="Address"/>
            </h:panelGroup>
            <h:panelGroup styleClass="levelTitle ui-state-default ui-corner-all
                                  #{wizardMasterDetailController.currentLevel eq 3 ? 'ui-state-hover' : ''}">
                <h:outputText value="Contact"/>
            </h:panelGroup>
            <h:panelGroup styleClass="levelTitle ui-state-default ui-corner-all
                                  #{wizardMasterDetailController.currentLevel eq 4 ? 'ui-state-hover' : ''}">
                <h:outputText value="Confirmation"/>
            </h:panelGroup>
        </h:panelGroup>
    </f:facet>

    <pe:masterDetailLevel level="1">
        <p:panel header="Personal Details">
            <h:panelGrid columns="2" columnClasses="formColumn1,formColumn2">
                <h:outputText value="Firstname: *"/>
                <p:inputText required="true" label="Firstname"
                             value="#{wizardMasterDetailController.user.firstname}"/>
                <h:outputText value="Lastname: *"/>
                <p:inputText required="true" label="Lastname"
                             value="#{wizardMasterDetailController.user.lastname}"/>
                <h:outputText value="Age: "/>
                <p:inputText value="#{wizardMasterDetailController.user.age}"/>
            </h:panelGrid>
        </p:panel>
        <p:commandButton value="Next" process="masterDetail"
                         style="margin-top: 10px;" icon="ui-icon-arrowthick-1-e">
            <pe:selectDetailLevel step="1"/>
        </p:commandButton>
        <p:commandButton value="Go to Save" process="masterDetail"
                         style="margin-top: 10px;" icon="ui-icon-arrowthickstop-1-e">
            <pe:selectDetailLevel level="4"/>
        </p:commandButton>
    </pe:masterDetailLevel>

    <pe:masterDetailLevel level="2">
        <p:panel header="Adress Details">
            <h:panelGrid columns="2" columnClasses="formColumn1,formColumn2">
                <h:outputText value="Street: "/>
                <p:inputText value="#{wizardMasterDetailController.user.street}"/>
                <h:outputText value="Postal Code: "/>
                <p:inputText value="#{wizardMasterDetailController.user.postalCode}"/>
                <h:outputText value="City: "/>
                <p:inputText value="#{wizardMasterDetailController.user.city}"/>
            </h:panelGrid>
        </p:panel>
        <p:commandButton value="Back" style="margin-top: 10px;" icon="ui-icon-arrowthick-1-w"
                         process="@this" immediate="true">
            <pe:selectDetailLevel step="-1"/>
        </p:commandButton>
        <p:commandButton value="Next" process="masterDetail"
                         style="margin-top: 10px;" icon="ui-icon-arrowthick-1-e">
            <pe:selectDetailLevel step="1"/>
        </p:commandButton>
    </pe:masterDetailLevel>

    <pe:masterDetailLevel level="3">
        <p:panel header="Contact Information">
            <h:panelGrid columns="2" columnClasses="formColumn1,formColumn2">
                <h:outputText value="Email: *"/>
                <p:inputText required="true" label="Email"
                             value="#{wizardMasterDetailController.user.email}"/>
                <h:outputText value="Phone: "/>
                <p:inputText value="#{wizardMasterDetailController.user.phone}"/>
                <h:outputText value="Additional Info: "/>
                <p:inputText value="#{wizardMasterDetailController.user.info}"/>
            </h:panelGrid>
        </p:panel>
        <p:commandButton value="Back" style="margin-top: 10px;" icon="ui-icon-arrowthick-1-w"
                         process="@this" immediate="true">
            <pe:selectDetailLevel step="-1"/>
        </p:commandButton>
        <p:commandButton value="Next" process="masterDetail"
                         style="margin-top: 10px;" icon="ui-icon-arrowthick-1-e">
            <pe:selectDetailLevel step="1"/>
        </p:commandButton>
    </pe:masterDetailLevel>

    <pe:masterDetailLevel level="4">
        <p:panel header="Confirmation">
            <h:panelGrid id="confirmation" columns="2" columnClasses="formColumn1,formColumn2">
                <h:outputText value="Firstname: "/>
                <h:outputText value="#{wizardMasterDetailController.user.firstname}"/>
                <h:outputText value="Lastname: "/>
                <h:outputText value="#{wizardMasterDetailController.user.lastname}"/>
                <h:outputText value="Age: "/>
                <h:outputText value="#{wizardMasterDetailController.user.age}"/>
                <h:outputText value="Street: "/>
                <h:outputText value="#{wizardMasterDetailController.user.street}"/>
                <h:outputText value="Postal Code: "/>
                <h:outputText value="#{wizardMasterDetailController.user.postalCode}"/>
                <h:outputText value="City: "/>
                <h:outputText value="#{wizardMasterDetailController.user.city}"/>
                <h:outputText value="Email: "/>
                <h:outputText value="#{wizardMasterDetailController.user.email}"/>
                <h:outputText value="Phone "/>
                <h:outputText value="#{wizardMasterDetailController.user.phone}"/>
                <h:outputText value="Info: "/>
                <h:outputText value="#{wizardMasterDetailController.user.info}"/>
            </h:panelGrid>
        </p:panel>
        <p:commandButton value="Back" style="margin-top: 10px;" icon="ui-icon-arrowthick-1-w"
                         process="@this" immediate="true">
            <pe:selectDetailLevel step="-1"/>
        </p:commandButton>
        <p:commandButton value="Submit" process="masterDetail"
                         actionListener="#{wizardMasterDetailController.save}"
                         style="margin-top: 10px;" icon="pi pi-save">
            <pe:selectDetailLevel level="1"/>
        </p:commandButton>
    </pe:masterDetailLevel>
</pe:masterDetail>
            
Components and more
Documentation
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