Selecionar linha em datatable

10 respostas
M

Bom dia pessoal, estou com uma pequena dúvida de iniciante. Tenho um datatable e gostaria de poder selecionar uma linha inteira apenas clicando em cima dela, mudando a linha de cor depois. como faço isso. Obs.: com um ícone em uma das colunas eu consigo selecionar a linha mas tmb não sei como mudar a cor da linha selecionada. E eu gostaria de poder clicar em qualquer parte da linha, qualquer campo. Se alguém puder me ajudar. Ah, não sei se ajuda mas estou usando o componente HtmlDataTable do richfaces. Obrigado.

10 Respostas

M

Ninguém???

F

Cara, voce conseguiu resolver esse problema? Eu estou com o mesmo problema e nao consigo resolver e nao acho soluçao tb. Se eu coloco uma coluna com um LInk eu consigo pegar o valor da linha, mas eu queria clicar em qualquer lugar da linha e consegui pegar o objeto que nela esta. Sei que ta antigo esse post, mas se tiver como me mandar como você fez eu agraço.
eu ate deixei um Post tb, mas ninguem responde.
http://www.guj.com.br/posts/list/209890.java#1067897

vlw

V

Pra pegar a linha faça assim:
Coloque o evento no datatable e o metodo no seu bean

<a4j:support event="onRowClick" action="#{meuBean.pegaLinha}"/>

public void pegaLinha() {
		try {
			System.out.println(getTable().getRowData());
		} catch (Exception e) {
			 e.printStackTrace();
		}
	}

Sobre mudar a cor, neste exemplo mostra como: http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?c=dataTable&tab=usage

<rich:dataTable 
                    onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
                    onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
F

Boa tarde,

Na verdade eu tinha tentado passando outros parametros, menos o onRowClick. Agora consegui pegar. Muito obrigado. Eu tenho um post desse assunto, vou finaliza-lo.

H

Pessoal,

Depois de muito pesquisar cheguei nesta thread, mas não estou conseguindo fazer funcionar. Estou conseguindo fazer com que os dados sejam exibidos na table, porém ao clicar sobre a linha o meu método que vai tratar a linha clicada não está sendo invocado. Alguém ai tem uma idéia do que seja. Segue meu código:

&lt;f:view&gt;

	&lt;a4j:form&gt;
	
		&lt;rich:dataTable onRowMouseOver="this.style.backgroundColor='#F1F1F1'" 
			onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" 
			cellpadding="0" 
			cellspacing="0" 
			width="700" 
			border="0" 
			var="usuario" 
			value="#{usuarioBean.listaUsuarios}"&gt;
			
			&lt;a4j:support binding="#{usuario}" event="onRowClick" actionListener="#{usuarioBean.actionCarregaUsuarioSelecionado}"/&gt;
			
			&lt;rich:column&gt;
				&lt;f:facet name="header"&gt;
					&lt;h:outputText value="Nome" /&gt;
				&lt;/f:facet&gt;
				&lt;h:outputText value="#{usuario.nm_usuario}" /&gt;
			&lt;/rich:column&gt;
			
			&lt;rich:column&gt;
				&lt;f:facet name="header"&gt;
					&lt;h:outputText value="e-mail" /&gt;
				&lt;/f:facet&gt;
				&lt;h:outputText value="#{usuario.xt_email}" /&gt;
			&lt;/rich:column&gt;
			
		&lt;/rich:dataTable&gt;
		
	&lt;/a4j:form&gt;

&lt;/f:view&gt;

Obrigado

H

Alguém saberia dizer o que está errado ?

Obrigado

F

o seu metodo actionCarregaUsuarioSelecionado recebe como parametro um ActionEvent do pacote javax.faces.event?

H

Sim. O método está esperando esse parâmetro. O problema é que esse método não chega a ser invocado.

F

ééé vei… pelo jeito esta tudo correto… Agora vc vai ter que começar a testar de outras formas…
vc popula essa table com um ListDataModel(List) ???

Caso seja, vc pode trocar o evento actionListener por action mesmo… ai no codigo vc consegue pegar…

Testa de outras maneiras ai vei… pq eu nao vi nada de errado no seu codigo…

J

Segue

<f:view>  

   <a4j:keepAlive beanName="usuarioBean" />

     <a4j:form>  
       
       <rich:dataTable onRowMouseOver="this.style.backgroundColor='#F1F1F1'"   
              onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"   
             cellpadding="0"   
              cellspacing="0"   
           width="700"   
             border="0"   
            var="usuario"   
            value="#{usuarioBean.listaUsuarios}">  
                
            <a4j:support 
                    event="onRowClick" 
                    actionListener="#{usuarioBean.actionCarregaUsuarioSelecionado}"
                     onsubmit="selecionar(this)" />  
               
            <rich:column>  
                  <f:facet name="header">  
                    <h:outputText value="Nome" />  
                 </f:facet>  
                 <h:outputText value="#{usuario.nm_usuario}" />  
             </rich:column>  
               
             <rich:column>  
                 <f:facet name="header">  
                      <h:outputText value="e-mail" />  
                 </f:facet>  
                 <h:outputText value="#{usuario.xt_email}" />  
             </rich:column>  
               
         </rich:dataTable>  
           
     </a4j:form>  
  
 </f:view>

JS para exibir visualmente a seleção da linha:

function selecionar(elemento) {
	var idSelecionado = elemento.cells[0].id;	 
	var linhas = elemento.parentNode.parentNode.rows;	
		
	for (i = 1; i < linhas.length; i++) {
		if ((i % 2) == 0) {
			linhas[i].className = "CSS_linha_par";
		} else {
			linhas[i].className = "CSS_linha_impar";
		}
	}
		
	elemento.className = "CSS_linha_selecionada";		
	
}

JAVA:

Public class usuarioBean {

  public void actionCarregaUsuarioSelecionado(ActionEvent event){

        HtmlDataTable dataTable = (HtmlDataTable) actionEvent.getComponent().getParent();
		
		SEU_OBJETO obj = ((SEU_OBJETO) dataTable.getRowData());

  }
}
Criado 10 de setembro de 2009
Ultima resposta 11 de ago. de 2010
Respostas 10
Participantes 5