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
autoSubmitWhen true, form is submitted automatically on change.Default is false.
bindingAn EL expression referring to a server side UIComponent instance in a backing bean.Default is generated.
buttonBarPositionPosition of the button bar: 'top', 'bottom', or 'both'.Default is bottom.
columnClassesComma-separated CSS classes for label and control columns.
idUnique identifier of the component in a namingContainer.Default is generated.
openExtendedWhen true, extended rows are shown by default.Default is false.
renderedBoolean value to specify the rendering of the component, when set to false component will not be rendered.Default is true.
styleInline style of the component.
styleClassStyle class of the component.
valueThe dynamic data model (e.g. DynaFormModel).
varName of the request-scoped variable that exposes the current row/control data.
varContainerIdName of the request-scoped variable that exposes the current container client id.
widgetVarName of the client side widget.
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-13 11:37