package com.sun.faces.event; import javax.faces.component.FacesComponent; import javax.faces.component.UIComponentBase; import javax.faces.component.UIViewRoot; import javax.faces.component.html.HtmlOutputText; import javax.faces.context.FacesContext; import javax.faces.event.AbortProcessingException; import javax.faces.event.PreRenderViewEvent; import javax.faces.event.SystemEvent; import javax.faces.event.SystemEventListener; @FacesComponent( value = "com.sun.faces.event.UIAddComponent" ) public class UIAddComponent extends UIComponentBase implements SystemEventListener { // // Constructor // public UIAddComponent() { setRendererType( "testcomponent" ); FacesContext context = FacesContext.getCurrentInstance(); UIViewRoot root = context.getViewRoot(); root.subscribeToViewEvent( PreRenderViewEvent.class, this ); } // // Public methods // @Override public String getFamily() { return "com.sun.faces.event"; } public boolean isListenerForSource( Object source ) { return ( source instanceof UIViewRoot ); } @Override public void processEvent( SystemEvent event ) throws AbortProcessingException { if ( !FacesContext.getCurrentInstance().isPostback() ) { HtmlOutputText component = new HtmlOutputText(); component.setValue( "Dynamically added child" ); getChildren().add( component ); } } }