Project Documentation

Summary

Tag name: <t:subform>
UIComponent class: org.apache.myfaces.custom.subform.SubForm
Tag class: org.apache.myfaces.custom.subform.SubFormTag
Component type: org.apache.myfaces.SubForm
Component family: org.apache.myfaces.SubForm
Renderer type: org.apache.myfaces.SubForm
Renderer class: org.apache.myfaces.custom.subform.SubFormRenderer

A SubForm which will allow for partial validation and model update.

A subform to an existing form. Inputs in this form will only be validated and updated, if a t:commandButton or t:commandLink has been clicked with an actionFor attribute which references the client-id of this subform. Optionally, the validation will trigger if a commandButton or commandLink embedded in this subform has been clicked, except if this command is a t:commandButton or t:commandLink with an actionFor attribute which doesn't reference the client-id of this subform.

Components will be validated and updated only if either a child-component of this form caused the submit of the form, or an extended commandLink or commandButton with the actionFor attribute set to the client-id of this component was used.

You can have several comma-separated entries in the actionFor-attribute - with this it's possible to validate and update more than one subForm at once.

Usage

<h:form>
   <t:subForm id="subFormId">
       <h:inputText value="#{bean.value}" />
   </t:subForm>
   <t:commandButton value="Submit subForm" actionFor="subFormId"/>
</h:form>
<h:form>
   <t:subForm id="subFormId">
       <h:inputText value="#{bean.value}" />
       <t:commandButton value="Submit subForm"/>
   </t:subForm>
</h:form>
<h:form>
   <t:subForm id="subFormId" preserveSubmittedValues="false">
       <h:inputText value="#{bean.value}" />
       <t:commandButton value="Submit subForm"/>
   </t:subForm>
</h:form>

Additional Information

There are cases when the subForm needs to be submitted not just by clicking a button inside or outside of it, but by clicking or changing fields like combo-boxes, check-boxes or radio-buttons, or many other fields; usualy this is done by invoking a JavaScript code in their "onchange" attribute for example. It's possible to submit the subForm also by JavaScript, if id="subFormId" then you just have to invoke "subFormId_submit()". For an example see subForm.jsp in the Tomahawk examples.

Attributes

Name Type Supports EL? Description
binding String Only EL Identifies a backing bean property (of type UIComponent or appropriate subclass) to bind to this component instance. This value must be an EL expression.
id String Yes An identifier for this particular component instance within a component view.

The id must be unique within the scope of the tag's enclosing NamingContainer (eg h:form or f:subview). The id is not necessarily unique across all components in the current view

This value must be a static value, ie not change over the lifetime of a component. It cannot be defined via an EL expression; only a string is permitted.

preserveSubmittedValues Boolean Yes true|false - set to false if you submit other subforms and would like to have your subform reflecting any model update. Default: true
rendered boolean Yes A boolean value that indicates whether this component should be rendered. Default value: true.