Ajax nos eventos de um PanelTab (JSF)

4 respostas
Luiz_Gustavo

Caros,

Atualmente tenho feito o seguinte para escutar os eventos de um PanelTab:

<t:panelTabbedPane width="100%" serverSideTabSwitch="true">
            				
     <t:tabChangeListener type="com.acme.project.util.CampoTabChangeListener"/>
            <t:panelTab label="#{msg.lblTabelas}">

 ....

Esse esquema tem funcionado bem, mas a cada evento eu tenho um refresh na tela.
Preciso usar ajax nesse processo, pois não posso ter esse refresh… então fiz o seguinte:

<t:panelTabbedPane width="100%">
    <t:panelTab label="#{msg.lblUnidadesPrograma}">    	
       <a4j:support  event="onclick" action="#{callProgramFace.atualizarDetail}" rendered="true"/>

....

Esse esquema funciona parcialemente, pois o evento não é disparado quando clico na “aba”, mas quando clico no corpo do panel.

Alguém saberia me dizer como implementar esse suporte mas ao clicar nas abas?

Estou usando o Exadel (MyFaces, Tomahawk, Ajax4jsf)

Agradeço a quem puder ajudar.

Att,

4 Respostas

F

Além do ajax4jsf utilize o richfaces que já tem um componente de tabPanel que faz o que você precisa.

Luiz_Gustavo

Obrigado pela dica Flin… vou pesquisar.

:smiley:

Luiz_Gustavo

Você sabe me dizer se ele pode ser usado junto com o tomahawk?

Luiz_Gustavo

Galera… consegui resolver meu problema.
Postando aqui pra ajudar a quem precisar:

Infelizmente usando o Tomahawk eu realmente não consegui ouvir os eventos nas abas do PanelTab e processá-los usando Ajax. Como havia dito, somente os eventos dentro dos PanelTab são “ouvidos” quanto tento colocar listeners para as PanelTab diretamente.
O Flin deu uma dica bacana, sobre o Richfaces, que oferece a possibilidade de se ouvir os eventos da PanelTabbedPane e processá-los usando Ajax… mas o pessoal não achou interessante colocar mais uma biblioteca de componentes no projeto (já usamos uma porrada). Então o Richfaces é uma opção interessante, mas para futuros projetos.

Bem, consegui resolver a parada da seguinte maneira:

// Criei um binding para uma propriedade no backbean
<t:panelTabbedPane width="100%" binding="#{tabelaFace.htmlPanelTabbedPane}">

         // e um método para processar os eventos
         <a4j:support  event="onclick" action="#{tabelaFace.eventosTabs}" rendered="true"/>
                           
                    <t:panelTab label="...">
                       ....

e no backbean:

(...)

   private HtmlPanelTabbedPane htmlPanelTabbedPane;

   (...)

   public HtmlPanelTabbedPane getHtmlPanelTabbedPane() {
        if (htmlPanelTabbedPane == null) {
            htmlPanelTabbedPane = new HtmlPanelTabbedPane();
        }
        return htmlPanelTabbedPane;
    }

    public void setHtmlPanelTabbedPane(HtmlPanelTabbedPane htmlPanelTabbedPane) {
        this.htmlPanelTabbedPane = htmlPanelTabbedPane;
    }

   
    public void eventosTabs(){
       
        switch(htmlPanelTabbedPane.getSelectedIndex()){       
           
            case 0:           
                metodoX();
                break;
            case 1:           
                metodoY();
                break;
            
            (...)
           
        }       
    }

   (...)

funcionou legal :wink:

Espero que ajude.

Criado 10 de maio de 2007
Ultima resposta 11 de mai. de 2007
Respostas 4
Participantes 2