arya-blue
luna-amber
luna-blue
luna-green
luna-pink
nova-dark
nova-light
saga-blue
vela-blue
DynaForm
This example demonstrates how to use nested model. You can picture it as a table contained in a cell. This is very useful when your control is a combination of pe:dynaFormControl. Note, XHTML code with pe:dynaForm stays the same, only Java model gets changed. Main steps:

  • Create parent model instance: DynaFormModel model = new DynaFormModel();
  • Add row, label, control and set relationship as you would do in normal case,
  • Create nested model instance: DynaFormModel nestedModel = new DynaFormModel();
  • Add row to regular grid: DynaFormRow nestedRow = nestedModel.createRegularRow();
  • Add label, control and set relationship as usual,
  • Add nested model: nestedRow.addModel(data, type, colspan, rowspan);
Search area
Source

<h:panelGroup id="dynaFormGroup">
    <p:messages id="messages" showSummary="true"/>  
    
    <pe:dynaForm id="dynaForm" value="#{nestedDynaFormController.model}" var="data" >
        <pe:dynaFormControl type="input" for="txt">
            <p:inputText id="txt" value="#{data.value}" required="#{data.required}"/>
        </pe:dynaFormControl>
        
        <pe:dynaFormControl type="date" for="cal" styleClass="calendar">
            <p:calendar id="cal" value="#{data.value}" required="#{data.required}" showOn="button"/>
        </pe:dynaFormControl>

        <f:facet name="headerRegular">  
           <div><h:outputText value="Search area" /></div>
        </f:facet>
        
        <f:facet name="buttonBar">
            <p:commandButton value="Submit" action="#{nestedDynaFormController.submitForm}"
                             process="dynaForm" update=":mainForm:dynaFormGroup :mainForm:inputValues"
                             oncomplete="handleComplete(xhr, status, args)"/>
            <p:commandButton type="reset" value="Reset" style="margin-left: 5px;"/>
        </f:facet>
    </pe:dynaForm>
</h:panelGroup>

<p:dialog header="Input values" widgetVar="inputValuesWidget">
    <p:dataList id="inputValues" value="#{nestedDynaFormController.bookProperties}" var="bookProperty"
                style="margin:10px;">
        <h:outputText value="#{bookProperty.name}: #{bookProperty.formattedValue}"
                      style="margin-right: 10px;"/>
    </p:dataList>
</p:dialog>

<h:outputScript id="dynaFormScript" target="body">
/* <![CDATA[ */
    function handleComplete(xhr, status, args) {
        if(args && args.isValid) {
            PF('inputValuesWidget').show();
        } else {
            PF('inputValuesWidget').hide();
        }
    }
/* ]]> */
</h:outputScript>

<h:outputStylesheet id="dynaFormCSS">
    .pe-dynaform-cell .ui-calendar input {  
        width: 100px;  
    }
    .pe-dynaform-headerfacet div{  
        border: 1px dotted #808080;  
        padding: 10px;  
        text-align: center;  
    }    
    .pe-dynaform-label {  
        text-align: left;  
        padding: 2px 20px 0 0;  
    }
</h:outputStylesheet>
            
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