Version 1

    Simple ajax sample(richfaces-demo main data table page used originally):


     cellpadding="0" cellspacing="0" id="table"
     width="700" border="0" var="record" value="#{report.expReport.records}">
     <f:facet name="header">
    //header there
     <rich:column  colspan="5">
     <a4j:commandLink value="+/-" reRender="table">
     <a4j:actionparam name="shown" value="#{not record.showDetails}" assignTo="#{record.showDetails}"/>
     <h:outputText value="#{}" />
     <rich:subTable rendered="#{record.showDetails}"
     var="expense" value="#{record.items}">
     <h:outputText value="#{}"></h:outputText>
     <f:facet name="footer">
     <rich:spacer />
    //more columns there 
     <f:facet name="footer">
    //footer there


    and showDetails variable added to Record object additionally.


    Could be also done just at client side. In that case - need just iterate tr siblings of the row with link which has subtable classes and revert display style. But I believe ajax way more convenient as it in sync with server side state.