Jsf componente dinamico

Pessoal,

Preciso gerar um OutputText dinamicamente no JSF dentro de uma action.

Tô usando o myfaces no Tomcat 5.5 e fiz assim:

    public String action_submit() {

        UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();

        //HtmlOutputText outText = new HtmlOutputText();
        HtmlOutputText outText = (HtmlOutputText) FacesContext.getCurrentInstance().getApplication().createComponent(HtmlOutputText.COMPONENT_TYPE);
        outText.setValue("asd asd asd asd asd asd");
        outText.setRendererType("javax.faces.Text");
        outText.setRendered(true);
        outText.setTitle("teste");

        viewRoot.getChildren().add(outText);

        return null;
    }

Fiz um debug, antes e depois do action e realmente o HtmlOutputText é adicionado ao viewRoot:

        System.out.println(viewRoot.getChildCount());
        List filhos = viewRoot.getChildren();
        Iterator it = filhos.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }

Só que não aparece nada na página, ou seja, o HtmlOutputText tá arvore mas não é gerado no HTML após o POST!

Alguém pode me ajudar nessa?

Obrigado.

Descobri que no faces 1.2 (usando Tomcat 6) o código funciona beleza:

    public String action_submit() {
        
        UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
        UIOutput ui = new UIOutput();
        ui.setValue("teste teste");
        ui.setRendered(true);
        viewRoot.getChildren().add(ui);

        return null;
    }

Porém não funciona no faces 1.1.x!!!
Sendo assim, utilizei um recurso computacional (mais conhecido como gambiarra):
No faces 1.1.x funcionou até agora somente com um “panelGrid”

  1. No JSP, eu coloquei um panelGrid com id=“container”:
<h:panelGrid id="container" columns="1"></h:panelGrid>
  1. No Bean, eu fiz assim:
    public String action_submit() {
        
        UIPanel container = (UIPanel) FacesContext.getCurrentInstance().getViewRoot().findComponent("container");
        UIOutput ui = new UIOutput();
        ui.setValue("teste teste");
        ui.setRendered(true);
        container.getChildren().add(ui);        

        return null;
    }

Desta forma funciona…

Obrigado a todos que leram.