I have the following s:decorate template as a form row template
<div class="formRow"> <a4j:region id="#{fieldId}Field" selfRendered="true" regionRenderOnly="true"> <ui:insert/> <div id="#{fieldId}Label" class="formlabel #{invalid?'errlabel':''}"> <ui:insert name="label"/> </div> <div id="#{fieldId}Input" class="formfield #{invalid?'flderr':''}"> <ui:insert name="field"/> <a4j:status for="#{fieldId}Field"> <f:facet name="start"> <h:graphicImage value="/img/ajax_process.gif"/> </f:facet> </a4j:status> </div> <a4j:outputPanel id="#{fieldId}MessageBlock" layout="block" styleClass="errorMsg" ajaxRendered="true" rendered="#{invalid}"> <s:message for="#{fieldId}" globalOnly="false"/> </a4j:outputPanel> </a4j:region> </div>
<s:decorate id="emailFormRow" template="/layout/formRow.xhtml"> <ui:define name="label"> <h:outputLabel for="email" value="#{messages['register.email']}"/> </ui:define> <ui:define name="field"> <h:inputText id="email" value="#{member.email}" required="true"> <a4j:support event="onchange" reRender="emailMessageBlock" requestDelay="0" ajaxSingle="true"/> </h:inputText> </ui:define> <ui:param name="fieldId" value="email"/> </s:decorate>