AJUDA: só imprime o último registro do banco de dados + jsf + mysql

3 respostas
V

pessoal, consegui fazer com que listasse, mas tem um problema, só ta listando o ultimo registro,por exemplo, se tiver 6 registros ele lista 6X o ultimo registro.
Segue o codigo, se alguem puder ajudar… vlw

codigo da Dao:

public class FuncionarioDao {
    ResultSet res ;
    Funcionario funcionario = new Funcionario();
     ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();    
    
   public FuncionarioDao() {       
    }

public List<Funcionario> getListarTodos() throws SQLException {
       Conexao conexao = Conexao.getInstance();
       Connection con = conexao.getConnection();  
       PreparedStatement pstm = con.prepareStatement("select * from funcionario");
       ResultSet rs = pstm.executeQuery();
       
       while (rs.next()) {
                     
           funcionario.setNome(rs.getString("nome"));
           funcionario.setSexo(rs.getString("sexo"));
           funcionario.setCidade(rs.getString("cidade"));           
           
           funcionarios.add(funcionario);
           System.out.println(funcionario.getNome()+","+funcionario.getSexo()+","+funcionario.getCidade());
       }
       
       rs.close();
       pstm.close();
       return funcionarios;
       
   }

codigo da FuncionarioBack:

public class FuncionarioBack {
    private Funcionario funcionario = new Funcionario();
	FuncionarioDao funcionarioDao = new FuncionarioDao();
	List<Funcionario> funcionarios = new ArrayList<Funcionario>();
	private String saida; 	
	
	public FuncionarioBack(){
		
	}
	
	public Funcionario getFuncionairo() {
		return funcionario;		
	}
	public void setFuncionario(Funcionario funcionario){
		this.funcionario = funcionario;
	}

public List<Funcionario> getFuncionarios() throws SQLException{
		
		funcionarios = funcionarioDao.getListarTodos();
		return funcionarios;
	}

codigo da Pagina que lista os resultados:

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<html>

<f:view>
<head>

<title>Insert title here</title>
</head>

<body>
	<h:form>
	<h:dataTable value ="#{funcionarioBack.funcionarios}" var = "func">
		<h:column>	
			<f:facet name="header">
				<h:outputText value = "Nome"/>
			</f:facet>	
        	<h:outputText value="#{func.nome}"/>			
		</h:column>
		<h:column>	
		<f:facet name="header">
				<h:outputText value = "Sexo"/>
			</f:facet>			
        	<h:outputText value="#{func.sexo}"/>
		</h:column>
		<h:column>
		<f:facet name="header">
				<h:outputText value = "Cidade"/>
			</f:facet>				
        	<h:outputText value="#{func.cidade}"/>
		</h:column>
	</h:dataTable>
	</h:form>
</body>

</f:view>

</html>

3 Respostas

aeciovc

aki tbm so lista os ultimos???

System.out.println(funcionario.getNome()+","+funcionario.getSexo()+","+funcionario.getCidade());???

vc já Debugou e viu se o ArrayList contem apenas os ultimos msm??

o codigo de adicionar no ArrayList tá certinho, eu acho!!

flw!!

jcmird

Amigo o problema do seu codigo é q no while vc sempre tá setando o mesmo objeto. E por isso q sempre o ultimo registro que ficará armazenado para resolver isso bastar colocar instancia um objeto novo cada iteraçao do loop.

Dentro while só colocar.

Funcionario funcionario = new Funcionario();

[quote]
while (rs.next()) {

funcionario.setNome(rs.getString("nome"));   
       funcionario.setSexo(rs.getString("sexo"));   
       funcionario.setCidade(rs.getString("cidade"));             
         
       funcionarios.add(funcionario);   
       System.out.println(funcionario.getNome()+","+funcionario.getSexo()+","+funcionario.getCidade());   
   }
V

só faltava inicializar mesmo!!!
listou todos!!!, mas quando peço pra listar da segunda vez sem fechar a sessão, ele repete os dados, tipo: nao tá atualizando! vou dá uma olhada por aqui, vcs tem alguma dica da atualização da tabela? Obrigado aí pela ajuda. vlw.

Criado 19 de janeiro de 2009
Ultima resposta 19 de jan. de 2009
Respostas 3
Participantes 3