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
bindingAn EL expression referring to a server side UIComponent instance in a backing bean.Default is generated.
breadcrumbAboveHeaderWhether to render breadcrumb above the header.Default is true.
contextValueContext value for the current level.
idUnique identifier of the component in a namingContainer.Default is generated.
levelCurrent detail level (1-based).Default is 1.
renderedBoolean value to specify the rendering of the component, when set to false component will not be rendered.Default is true.
selectLevelListenerMethod expression invoked when navigating to a detail level.
showAllBreadcrumbItemsWhether to show all breadcrumb items.Default is false.
showBreadcrumbWhether to show the breadcrumb.Default is true.
showBreadcrumbFirstLevelWhether to show breadcrumb on first level.Default is true.
styleInline style of the component.
styleClassStyle class of the component.
PrimeFaces Extensions Showcase - © 2011-2025,PrimeFaces: 16.0.0-SNAPSHOT,PrimeFaces Extensions: 16.0.0-SNAPSHOT,JSF: Apache MyFaces Core 4.0 - Impl 4.0.3,Server: Apache Tomcat (TomEE)/10.1.52 (10.1.4),Build time: 2026-03-08 21:04