When defining an <apex:facet>, it is always used as the child of another Visualforce component. The name attribute on the facet determines which area of the parent component is overridden.
<apex:page standardController="Account"> <apex:pageBlock> <apex:dataTable value="{!account}" var="a"> <apex:facet name="caption"><h1>This is {!account.name}</h1></apex:facet> <apex:facet name="footer"><p>Information Accurate as of {!NOW()}</p></apex:facet> <apex:column> <apex:facet name="header">Name</apex:facet> <apex:outputText value="{!a.name}"/> </apex:column> <apex:column> <apex:facet name="header">Owner</apex:facet> <apex:outputText value="{!a.owner.name}"/> </apex:column> </apex:dataTable> </apex:pageBlock> </apex:page>
<apex:page controller="exampleCon"> <apex:form > <apex:outputText value="Watch this counter: {!count}" id="counter"/> <apex:actionStatus id="counterStatus"> <apex:facet name="start"> <img src="{!$Resource.spin}"/> <!-- A previously defined image --> </apex:facet> </apex:actionStatus> <apex:actionPoller action="{!incrementCounter}" rerender="counter" status="counterStatus" interval="7"/> </apex:form> </apex:page>
public class exampleCon { Integer count = 0; public PageReference incrementCounter() { count++; return null; } public Integer getCount() { return count; } }