datatable com jfs

Java

26/09/2014

Construí um h:dataTable que pega dados de uma tabela, mas ao preenche-la o dataTable acrescenta em cada linha os dados da última linha retornada pela consulta, ou seja, se eu tenho 20 linhas na tabela, o dataTable gera 20 linhas, todas com os dados da última linha . Já conferi a conecção e o método, e todos estão funcionando corretamente. O consulta tetorna um array normal.

Desde já agradeço.

José Ferreira Filho
Jose Filho

Jose Filho

Curtidas 0

Respostas

Ronaldo Lanhellas

Ronaldo Lanhellas

26/09/2014

Poste seu código do datatable aqui para que possa analisar e explique melhor o seu problema porque ficou um pouco confuso
GOSTEI 0
Jose Filho

Jose Filho

26/09/2014

Grato pela consideração.

No banco existe uma tabela chamada usuários, com 16 registros grafados,. Ao executar o dataTable aparece 16 linhas, mas todas as linhas com os dados de um único usuário, repetidos nas 16 linhas, que é a última linha retornada da consulta. Estou anexando os códigos e duas imagens, uma do banco e outra da página xhtml.
import java.sql.*;
public class ConnectFactory {
private Connection con;
private PreparedStatement pst;
public static Connection getConnection() throws ProjetoException {
try {
String driver, url, usuario, senha;
driver = "org.postgresal.Driver";
url = "jdbc:postgresql://localhost:5432/project_prog_web";
usuario = "postgres";
senha = "ixa32567";
Class.forName("org.postgresql.Driver");
Connection con;
con = DriverManager.getConnection(url, usuario, senha);
con.setAutoCommit(true);
return con;
} catch (ClassNotFoundException cnf) {
String msg = "Driver de conexao com o banco nao encontrado \n mensagem original: " + cnf.getMessage();
throw new ProjetoException(msg);
} catch (SQLException e) {
e.printStackTrace();
throw new ProjetoException("t");
}
}
}

package Controller;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import Bean.UsuarioBean;
import DAO.ProjetoException;
import DAO.UsuarioDAO;

@ManagedBean(name = "usuarioController")
@SessionScoped
public class UsuarioController implements Serializable{
private UsuarioBean usb;
private UsuarioDAO usd;

public UsuarioController(){
usb = new UsuarioBean();
usd = new UsuarioDAO();
}

java.sql.Date dtValue;
Integer per;
public static Integer statusAtivo;

public UsuarioDAO getUsd() {
return usd;
}

public void setUsd(UsuarioDAO usd) {
this.usd = usd;
}

public UsuarioBean getUsb() {
return usb;
}

public void setUsb(UsuarioBean usb) {
this.usb = usb;
}

public UsuarioBean usbMet() {
UsuarioBean usf = this.usb;
return usf;
}
public List<UsuarioBean> listaUsuarioController() throws ProjetoException {
List<UsuarioBean> ret = new ArrayList<UsuarioBean>();
UsuarioDAO usr = new UsuarioDAO();
try {
ret = usr.listaUsuarios(this.usb);
} catch (Exception e) {
// TODO: handle exception
}
return ret;
}
}

package Bean;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;


public class UsuarioBean {

private String login;
private String senha;
private Integer idu;
private String nome;
private String cpf;
private String datanascimento;
private Boolean Status;
private String permissao;

public UsuarioBean(String login, String senha, Integer idu, String nome,
String cpf, String datanascimento, Boolean status, String permissao) {
this.login = login;
this.senha = senha;
this.idu = idu;
this.nome = nome;
this.cpf = cpf;
this.datanascimento = datanascimento;
Status = status;
this.permissao = permissao;
}
public UsuarioBean(String login, String senha, String nome, String cpf,
String datanascimento, Boolean status, String permissao) {
this.login = login;
this.senha = senha;
this.nome = nome;
this.cpf = cpf;
this.datanascimento = datanascimento;
Status = status;
this.permissao = permissao;
}
public UsuarioBean(String login, String senha) {
this.login = login;
this.senha = senha;
}
public UsuarioBean() {
login="";
senha="";
nome ="";
cpf ="";
datanascimento=null;
Status=true;
permissao="";
}

public UsuarioBean(String login, String senha, String nome, String cpf,
String datanascimento, String permissao) {
this.login = login;
this.senha = senha;
this.nome = nome;
this.cpf = cpf;
this.datanascimento = datanascimento;
this.permissao = permissao;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Integer getIdu() {
return idu;
}
public void setIdu(Integer idu) {
this.idu = idu;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getDatanascimento() {
return datanascimento;
}
public void setDatanascimento(String datanascimento) {
this.datanascimento = datanascimento;
}
public Boolean getStatus() {
return Status;
}
public void setStatus(Boolean status) {
Status = status;
}
public String getPermissao() {
return permissao;
}
public void setPermissao(String permissao) {
this.permissao = permissao;
}

public Date converterdata(String data){
SimpleDateFormat formater = new SimpleDateFormat("dd/MM/yyyy");
Date Date = null;
try {
Date = new Date(formater.parse(data).getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return Date;
}

public Integer converterParaInteiro(String inteiro){
Integer per = Integer.parseInt(inteiro);
return per;
}
public String converterDataString(Date data){
SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyyy" );
String retorno = sdf.format( data );
return retorno;
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">

<h:head>Lista de usuários</h:head>
<h:body>
<h:form id="listaUsuario">
<p:dataTable value="#{usuarioController.listaUsuarioController)}"
var="usuVar" width="100%" border="2" >
<f:facet name="header">Lista de Usuários</f:facet>
<p:column>
<f:facet name="header">
<h:outputLabel value="Nome:" />
</f:facet>
<h:outputText value="#{usuVar.nome}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputLabel value="Login:" />
</f:facet>
<h:outputText value="#{usuVar.login}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputLabel value="Senha:" />
</f:facet>
<h:outputText value="#{usuVar.senha}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputLabel value="CPF:" />
</f:facet>
<h:outputText value="#{usuVar.cpf}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputLabel value="Data de Nascimento:" />
</f:facet>
<h:outputText value="#{usuVar.datanascimento}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputLabel value="Nível:" />
</f:facet>
<h:outputText value="#{usuVar.permissao}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputLabel value="Status:" />
</f:facet>
<h:outputText value="#{usuVar.status}" />
</p:column>
<p:column>
<f:facet name="header">Operações:</f:facet>
<h:commandButton value="Editar" />
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
[img]http://arquivo.devmedia.com.br/forum/imagem/0-20140929-095947%20%281%29.png[/img][img]http://arquivo.devmedia.com.br/forum/imagem/0-20140929-100008.png[/img]
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

26/09/2014

Não sei se foi errado de digitação mas o dataTable tem um ")" (parênteses) a mais na sintaxe:

errado
<p:dataTable value="#{usuarioController.listaUsuarioController)}"
var="usuVar" width="100%" border="2" >


correto
<p:dataTable value="#{usuarioController.listaUsuarioController}"
var="usuVar" width="100%" border="2" >


Outra coisa.. tente adicionar o atributo rowKey pelo id do usuário

<p:dataTable value="#{usuarioController.listaUsuarioController}" rowKey="#{usuVar.id}"
var="usuVar" width="100%" border="2" >
GOSTEI 0
Jose Filho

Jose Filho

26/09/2014

Obrigado amigo.

Fiz conforme sua orientação, mais nada adiantou. Inclusive reinstalei o toncat, reconfigurei no eclipse.

Aquele erro não estava no código original. Com sua orientação, ficou assim.

<p:dataTable value="#{usuarioController.listaUsuarioController()}"
var="usuVar" width="100%" border="2" rowKey="#{usuVar.idu}">

Grato.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

26/09/2014

Certo, isso indica que o problema pode estar mais adiante, ou seja, no retorno da lista de usuários. Faça o seguinte teste:

1 - Antes de mostrar a lista de usuários no datatable, depure seu código e veja os valores retornados, direto no objeto List.
2 - Se você tem uma collection dentro do seu objeto Usuario e estiver usando HQL, então você deve dar um distinct para evitar a duplicação de registros:

errado: SELECT c FROM Usuario c JOIN FETCH c.logs (isso vai retornar 100 usuarios iguais se existir 100 logs para esse usuario)
certo: SELECT distinct(c) FROM Usuario c JOIN FETCH c.logs
GOSTEI 0
Jose Filho

Jose Filho

26/09/2014

Amigo, não existe usuário repetidos na tabela e no método que busca os usuários eu coloque um System.out.println para observar no console do eclipse como a consulta retornava, e ela retorna como esperado. e na hora de popular o datatable que o problema acontece. Abaixo o método e a resposta do System.out.println no console. Grato.

set 30, 2014 4:26:57 AM org.apache.catalina.core.AprLifecycleListener init
INFORMAÇÕES: Loaded APR based Apache Tomcat Native library 1.1.30 using APR version 1.4.8.
set 30, 2014 4:26:57 AM org.apache.catalina.core.AprLifecycleListener init
INFORMAÇÕES: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
set 30, 2014 4:26:58 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Projeto Sistema 123444r' did not find a matching property.
set 30, 2014 4:26:59 AM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFORMAÇÕES: OpenSSL successfully initialized (OpenSSL 1.0.1g 7 Apr 2014)
set 30, 2014 4:27:00 AM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["http-apr-8080"]
set 30, 2014 4:27:00 AM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-apr-8009"]
set 30, 2014 4:27:00 AM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 4525 ms
set 30, 2014 4:27:00 AM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
set 30, 2014 4:27:00 AM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/7.0.55
set 30, 2014 4:27:02 AM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFORMAÇÕES: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [236] milliseconds.
set 30, 2014 4:27:06 AM com.sun.faces.config.ConfigureListener contextInitialized
INFORMAÇÕES: Inicializando Mojarra 2.1.22 ( 20130508-2000 https://svn.java.net/svn/mojarra~svn/tags/2.1.22@11945) para o contexto '/aaaaa'
set 30, 2014 4:27:06 AM com.sun.faces.spi.InjectionProviderFactory createInstance
INFORMAÇÕES: JSF1048: Anotações PostConstruct/PreDestroy presentes. Os métodos ManagedBeans marcados com essas anotações informarão as anotações processadas.
set 30, 2014 4:27:08 AM org.primefaces.webapp.PostConstructApplicationEventListener processEvent
INFORMAÇÕES: Running on PrimeFaces 3.5
set 30, 2014 4:27:08 AM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-apr-8080"]
set 30, 2014 4:27:08 AM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-apr-8009"]
set 30, 2014 4:27:08 AM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 7838 ms
dasdsa - 654444444444 - 18 - sadasd - 3
dsad - 34555555555 - 16 - dasda - 1
dsad - 555555555555 - 19 - sada - 6
dsada - 666666666666 - 17 - jff - 1
htrrrrrryy - 86666667777 - 21 - qqq - 4
João Lopes Hunt - 23498752567 - 3 - ope - 2
Maria Bela Neta - 96514563210 - 4 - ate - 1
Mário da Silva - 23476587629 - 2 - ger - 3
rrrrrrrrrrrrr - 86666667777 - 22 - qqq - 4
sada - 1444444444 - 12 - sadsa - 1
sada - 23344444444 - 14 - sdasadfdfdfdfdfdfdf - 1
sada - 1333333333 - 11 - sadsa - 1
sada - 566666666666 - 15 - 1231 - 1
sada - 1444444444 - 13 - sdasadfdfdfdfdfdfdf - 1
sdad - 12222222222 - 10 - asdad - 2
sssssssssssss - 11111111111 - 20 - ss - 4
dasdsa - 654444444444 - 18 - sadasd - 3
dsad - 34555555555 - 16 - dasda - 1
dsad - 555555555555 - 19 - sada - 6
dsada - 666666666666 - 17 - jff - 1
htrrrrrryy - 86666667777 - 21 - qqq - 4
João Lopes Hunt - 23498752567 - 3 - ope - 2
Maria Bela Neta - 96514563210 - 4 - ate - 1
Mário da Silva - 23476587629 - 2 - ger - 3
rrrrrrrrrrrrr - 86666667777 - 22 - qqq - 4
sada - 1444444444 - 12 - sadsa - 1
sada - 23344444444 - 14 - sdasadfdfdfdfdfdfdf - 1
sada - 1333333333 - 11 - sadsa - 1
sada - 566666666666 - 15 - 1231 - 1
sada - 1444444444 - 13 - sdasadfdfdfdfdfdfdf - 1
sdad - 12222222222 - 10 - asdad - 2
sssssssssssss - 11111111111 - 20 - ss - 4

public List<UsuarioBean> listaUsuarios(UsuarioBean usua) throws ProjetoException{
String st = "SELECT * FROM est.usuarios ORDER BY nome";
List<UsuarioBean> arrayus = new ArrayList<UsuarioBean>();
Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
con = ConnectFactory.getConnection();
ps = con.prepareStatement(st);
rs = ps.executeQuery();
con.close();
while (rs.next()) {
usua.setLogin(rs.getString("login"));
usua.setSenha(rs.getString("senha"));
usua.setIdu(rs.getInt("idu"));
usua.setNome(rs.getString("nome"));
usua.setCpf(rs.getString("cpf"));
usua.setDatanascimento(u.converterDataString(rs.getDate("datanascimento")));
usua.setStatus(rs.getBoolean("status"));
usua.setPermissao(Integer.toString(rs.getInt("permissao")));
System.out.println(usua.getNome()+ " - "+usua.getCpf()+ " - "+usua.getIdu()+ " - "+usua.getLogin()+ " - "+usua.getPermissao());
arrayus.add(usua);
}
} catch (Exception e) {
// TODO: handle exception
}
return arrayus;
}
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

26/09/2014

O problema está mesmo no seu método "listaUsuarios". Você está sobescrevendo os valores do bean Usuario no seu laço for, você deve criar um novo usuário a cada iteração. Veja:


public List<UsuarioBean> listaUsuarios(UsuarioBean usua) throws ProjetoException{
String st = "SELECT * FROM est.usuarios ORDER BY nome";	
List<UsuarioBean> arrayus = new ArrayList<UsuarioBean>();
Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
con = ConnectFactory.getConnection();	
ps = con.prepareStatement(st);
rs = ps.executeQuery();
con.close();
while (rs.next()) {
UsuarioBean usua = new UsuarioBean(); //NOVA LINHA ADICIONADA
usua.setLogin(rs.getString("login"));
usua.setSenha(rs.getString("senha"));
usua.setIdu(rs.getInt("idu"));
usua.setNome(rs.getString("nome"));
usua.setCpf(rs.getString("cpf"));
usua.setDatanascimento(u.converterDataString(rs.getDate("datanascimento")));
usua.setStatus(rs.getBoolean("status"));
usua.setPermissao(Integer.toString(rs.getInt("permissao")));
System.out.println(usua.getNome()+ " - "+usua.getCpf()+ " - "+usua.getIdu()+ " - "+usua.getLogin()+ " - "+usua.getPermissao());
arrayus.add(usua);
}	
} catch (Exception e) {
// TODO: handle exception
}
return arrayus; 
}


Outra coisa, você não precisa passar o objeto UsuarioBean como parâmetro, afinal você está listando tudo.
GOSTEI 0
Jose Filho

Jose Filho

26/09/2014

Obrigado amigo, deu tudo certo. Entendi o erro.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

26/09/2014

Obrigado amigo, deu tudo certo. Entendi o erro.


De nada.
GOSTEI 0
POSTAR