Desabilitar botões com Primefaces

Bom dias meus amigos, como vão?
Tenho muitas vezes entrado aqui no GUJ para procurar ajuda com o sistema que estou fazendo para o TCC e tenho encontrado muitas respostas, obrigado a todos =D

Mas tenho um probleminha aqui com meu sistema que gostaria que me ajudassem, se possível.
Tenho um dataTable no meu sistema (utilizo Primefaces) que apresenta os dados dos alimentos cadastrados.
No footer da minha dataTable tenho um botão “Excluir” que, quando eu seleciono alguma linha da tabela, eu posso excluir esse dado através do botão.

O que eu queria é saber como faço para habilitar o botão apenas quando tivesse alguma linha selecionada…
Podem me ajudar com faço?

Obrigado galera
[]'s

Você vai ter que utilizar o atributo disabled. Não sei como está sua estrutura, mas se não me engano ao selecionar um item na tabela você não envia nada pro servidor, correto?

Nesse caso o que te sobra é utilizar JavaScript. Um método de callback no check da tabela para habilitar/desabilitar o botão no rodapé.

Já fez algo assim?

Você pode fazer algo parecido com isso:

No teu bean voce deve ter algo assim:

...

private Entidade entidadeSelecionada;
private List<Entidade> entidades;
private EntidadeDAO entidadeDAO;

//gets e sets

no teu .xhtml voce faz assim:


<p:dataTable id="dtEntidades" var="item" value="#{EntidadeBean.entidades}"
                                         selection="#{EntidadeBean.entidade}"
                                         selectionMode="single" rowKey="#{item.id}">

                                //Columns 

                            </p:dataTable>

<p:commandButton icon="ui-icon-close" value="Excluir" action="#{EntidadeBean.excluir}" enable="#{EntidadeBean.entidade != null}"/>

Fiz de cabeça então acho que mais ou menos assim.

Além do que o Daniel T.S sugeriu você pode colocar:

<p:dataTable id="dtEntidades" var="item" value="#{EntidadeBean.entidades}"  
                                         selectionMode="single" rowKey="#{item.id}">  
                  <p:ajax event="rowSelect" listener="#{EntidadeBean.onRowSelect}"    update="excluir" />
  
                  //Columns   
</p:dataTable>  
  
<p:commandButton id="excluir" icon="ui-icon-close" value="Excluir" action="#{EntidadeBean.excluir}" disabled="#{EntidadeBean.excluirHabilitado}"/>

E no ManagedBean você pode colocar assim:

public class EntidadeBean {  

        private Entidade entidadeSelecionada;  
        private List<Entidade> entidades;  
        private EntidadeDAO entidadeDAO;  
  
         //gets e sets 

         public boolean isExcluirHabilitado(){
               return this.entidadeSelecionada == null;
         }

         public void onRowSelect(SelectEvent event) {  
                 entidadeSelecionada = (Entidade) event.getObject();  
         }  

         public void excluir(){
                 dao.excluir(entidadeSelecionada);
         }
}

Obrigado guilherme, funcionou direitinho =D
Obrigado a todos que responderam também!

Mas guilherme, me diga uma coisa:
notei que no momento em que seleciono a linha desejada, meu botão fica habilitado, como eu queria.
Notei também que o objeto entidadeSelecionada fica com um valor, e depois do evento, fica nulo.
Eu achei nessa solução que você me deu uma solução para outro problema que estou tendo rsrsrs

Tem como eu fazer com que a variável entidadeSelecionada continue com o valor mesmo depois do evento ter ocorrido?

Obrigado

[quote=guilherme_costa]Além do que o Daniel T.S sugeriu você pode colocar:

<p:dataTable id="dtEntidades" var="item" value="#{EntidadeBean.entidades}"  
                                         selectionMode="single" rowKey="#{item.id}">  
                  <p:ajax event="rowSelect" listener="#{EntidadeBean.onRowSelect}"    update="excluir" />
  
                  //Columns   
</p:dataTable>  
  
<p:commandButton id="excluir" icon="ui-icon-close" value="Excluir" action="#{EntidadeBean.excluir}" disabled="#{EntidadeBean.excluirHabilitado}"/>

E no ManagedBean você pode colocar assim:

[code]
public class EntidadeBean {

    private Entidade entidadeSelecionada;  
    private List<Entidade> entidades;  
    private EntidadeDAO entidadeDAO;  

     //gets e sets 

     public boolean isExcluirHabilitado(){
           return this.entidadeSelecionada == null;
     }

     public void onRowSelect(SelectEvent event) {  
             entidadeSelecionada = (Entidade) event.getObject();  
     }  

     public void excluir(){
             dao.excluir(entidadeSelecionada);
     }

}
[/code][/quote]

Boa Guilherme. :thumbup: