JSF - Recuperar linha selecionada

7 respostas
S

Galera, estou com uma duvida..

Tenho minha tabela, eu clico na linha e clico em um botão, mas não consigo trazer os itens dessa linha..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<ui:composition template="/pages/template/templatedefault.xhtml"
   	  	xmlns="http://www.w3.org/1999/xhtml"
		xmlns:h="http://java.sun.com/jsf/html"
		xmlns:f="http://java.sun.com/jsf/core"
		xmlns:ui="http://java.sun.com/jsf/facelets"
		xmlns:p="http://primefaces.org/ui">
		
	<ui:define name="conteudo">
		<h:form prependId="false" id="form">
			<div id="listaClienteDIV"> 
				<p:panel id="painel-listar" header="Lista de Clientes"> <!-- selection="#{cadClientes.b}" -->
				    <p:dataTable id="tabela" var="b" value="#{cadClientes.lista}" rowKey="#{b.nome}" selectionMode="single"  
				               scrollable="true" scrollWidth="615" scrollHeight="200" >
				   		 <f:facet name="header">Selecione a linha e clique em "Ver" para detalhes.</f:facet>
				   		 
				   		 <p:column headerText="Nome">
				   		 	  <h:outputText value="#{b.nome}"/>
				   		 </p:column>
				   		 <p:column headerText="Nascimento">
				   		 	  <h:outputText value="#{b.nascimento}"/>
				   		 </p:column>
				   		 <p:column headerText="RG">
				   		 	  <h:outputText value="#{b.rg}"/>
				   		 </p:column>
						 <p:column headerText="CPF/CNPJ">
				   		 	  <h:outputText value="#{b.cpfCnpj}"/>
				   		 </p:column>				   		 
				   		 <p:column headerText="Endereço">
				   		 	  <h:outputText value="#{b.endereco}"/>
				   		 </p:column>
				   		 <p:column headerText="Numero">
				   		 	  <h:outputText value="#{b.numero}"/>
				   		 </p:column>
				   		 <p:column headerText="CEP">
				   		 	  <h:outputText value="#{b.cep}"/>
				   		 </p:column>
				   		 <p:column headerText="Bairro">
				   		 	  <h:outputText value="#{b.bairro}"/>
				   		 </p:column>
				   		 <p:column headerText="Cidade">
				   		 	  <h:outputText value="#{b.cidade}"/>
				   		 </p:column>
				   		 <p:column headerText="Estado">
				   		 	  <h:outputText value="#{b.estado}"/>
				   		 </p:column> 
				   		 <p:column headerText="Telefone Res.">
				   		 	  <h:outputText value="#{b.telefoneRes}"/>
				   		 </p:column>
 				   		 <p:column headerText="Telefone Com.">
				   		 	  <h:outputText value="#{b.telefoneCom}"/>
				   		 </p:column>
 				   		 <p:column headerText="Celular">
				   		 	  <h:outputText value="#{b.telefoneCel}"/>
				   		 </p:column>
				   		 
				   		 <f:facet name="footer">
				   		 <p:commandButton ajax="false" icon="ui-icon-search" immediate="true" value="Ver" action="#{cadClientes.visualizar}">
				   			<!-- 	 
				   		 	  <f:setPropertyActionListener value="#{b}" target="#{cadClientes.b}" /> não funciona =/
				   		  -->
				   		 </p:commandButton>
				   		
				   		 </f:facet>
				    </p:dataTable>
				</p:panel>
			</div>
		</h:form>
	</ui:define>
</ui:composition>

alguem sabe como eu faço isso?! vllw =D

7 Respostas

D

Existe uma classe chamada DataModel do faces. Se você utilizar um objeto dela como value da dataTable isso fica fácil.
Aí basta usar o método getRowData no managedbean e você tem o objeto da linha selecionada.

S

drsMachado, pode me ajudar com um problema?

D

Esse exemplo do primefaces mostra exatamente o que tu precisa fazer. Da uma olhada nele, se não entender avisa que posso tentar explicar. Mas o segredo o selection="#{tableBean.selectedCar}", é nessa propriedade que será setado o valor da linha selecionada.

http://www.primefaces.org/showcase-labs/ui/datatableRowSelectionSingle.jsf

S

drsmachado: Seria mais ou menos assim:

http://www.mkyong.com/jsf2/jsf-2-datatable-sorting-example-datamodel/

drrockenbach: Irei olhar agora =D

S

drrockenbach:

E como eu passo os valores para a classe do java?

D

Quando tu define o selectionMode=“single”, quer dizer que tu vai selecionar apenas uma linha por vez. Logo tu precisa de uma propriedade para setar o valor da linha que tu selecionar. Isso é o que vai no selection, que no caso do primefaces é selection="#{tableBean.selectedCar}".

Então não é necessário fazer anda além disso. Fazendo isso, quando tu clicar na linha, o valor será setado na propriedade selectedCar do bean.
Nota que quando o tipo do selectionMode for multiple, a única coisa que muda, é que agora a tua propriedade vai ser um array, conforme o exemplo abaixo.

http://www.primefaces.org/showcase-labs/ui/datatableRowSelectionMultiple.jsf

H

Aqui tem um exemplo: Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate.

Mostra como fazer a selecionar um cara apertando um botão.

Existe também a opção de exibir valor ao clicar na linha da tabela, que aqui mosta: Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate

Criado 11 de dezembro de 2012
Ultima resposta 11 de dez. de 2012
Respostas 7
Participantes 5