JSF com richfaces na classe. Como fazer? Afinal, os container's JSF só aceitam UIComponent's

Srs.
Podem apostar que só postei aqui depois de muito pesquisar no google.
Diga-mos que eu tenha a seguinte situação:

HtmlPanelGroup panel = new HtmlPanelGroup();

panel.getChildren().add(new HtmlCommandButton()); // Funciona pq o  HtmlCommandButton é um UIComponent

panel.getChildren().add(new AjaxCommandButton()); // Não Funciona pq o   AjaxCommandButton não é um UIComponent

Como faço para inserir um AjaxCommandButton(UIComponentTagBase) nos container’s que existem na API do JSF?? Alguém sabe??

Muito obrigado desde então.

[]'s

Opa neeryck!

Sei muito bem pelo que você está passando. :slight_smile:

Com o passar do tempo trabalhando com JSF, tenho formada, pelo menos por enquanto, as seguintes opiniões:

  1. Procure sempre um componente que faça o que você pretende, caso não encontre, pese muito bem o custo/benefício de se contruir um componente ou mude o seu projeto de interface para se adequar a uma nova realidade;

  2. Interfaces extremamente dinâmicas, mesmo com JSF 2, ainda estão longe de serem uma realidade. O seu caso é um exemplo, muitos “componentes” são implementados através de tags, ou seja, além de (muitas delas) serem processadas muito cedo no ciclo de vida JSF (RESTORE_VIEW) não podem ser adicionadas através de binding. A tag ui:include é um exemplo clássico. Imagine o cenário onde você quer adicionar includes dinâmicos através de Ajax: no seu include você aponta para uma propriedade de um bean de sessão contendo a viewId que você deseja ir e ações setam esse atributo para mudar o viewId de acordo com a necessidade. Parece simples? E é! Mas com JSF 2 simplesmente não dá para fazer, pelo menos não de forma simples. A tag ui:include é executada na fase RESTORE_VIEW, ou seja, vai no bean de sessão e dá um getViewId no seu bean de sessão, depois lá na frente (INVOKE_APPLICATION) é invocada a ação que muda a viewId no bean de sessão, ou seja, nesse momento ao renderizar a página vai ser exibida ainda a viewId anterior e não a setada pela sua ação. Tem workarounds que fazem duas requisições Ajax, mas isso, além de ser um típico caso de POG, gera outros problemas, pq vc passa a ter que aumentar o scopo dos seus beans, tendo em vista que vão ter que manter o estado entre, no mínimo, duas requisições. Fora problemas com viewid duplicados em virtude do render partial e outras coisitas mais. :slight_smile:

Para quem quiser saber mais:

http://technicalbrainwave.wordpress.com/2009/10/18/layouting-and-dynamic-includes-in-facelets/#more-136
http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=1251&start=0

Até mais!

Ao invés de AjaxCommandButton utilize HtmlAjaxCommandButton.

Utilizo assim e funciona na boa…

[quote=ibira]Ao invés de AjaxCommandButton utilize HtmlAjaxCommandButton.

Utilizo assim e funciona na boa…[/quote]

Obrigado, estava quebrando a cabeça aqui com AjaxCommandButton.