Estudando array

6 respostas
alexandremanowar

E ae pessoal blz

Então estou estudando arrays e fiz dois modelos um simples e um mais detalhado, o primeiro esta exbindo resultado legal o segundo esta exibindo uns dados estranhos na tela.
Veja como esta o resultado na tela:
[b]
String de nome simples: André Muraro

exemplo de List 1:
Marcia David
Alexandre
Administrador Filiais
Márcia laura
André Muraro
André Muraro

exemplo de List 2:
Interfaces.ClassArray@1ec3adc
Interfaces.ClassArray@c7f06
Interfaces.ClassArray@677ea2
Interfaces.ClassArray@aaf64e
Interfaces.ClassArray@10a234
Interfaces.ClassArray@93b59
[/b]

Então como vcs podem ver o exeplo de List 1 exibiu na boa já o dois mostrou esses valores estranhos.
Olha o meu código:
Essa é a class:

/*
 * ClassArray.java
 *
 * Created on 27 de Agosto de 2007, 21:46
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package Interfaces;

/**
 *
 * @author alexandre
 */
public class ClassArray 
{
    private String nome;
    private String cargo;
    private String usuario;
    private String senha;
    
    
    public String getNome()
    {
        return nome;
    }
    
    public void setNome(String nome)
    {
        this.nome = nome;
    }
    
    public String getCargo()
    {
        return cargo;
    }
    
    public void setCargo(String cargo)
    {
        this.cargo = cargo;
    }
    
    public String getUsuario()
    {
        return usuario;
    }
    
    public void setUsuario(String usuario)
    {
        this.usuario = usuario;
    }
    
    public String getSenha()
    {
        return senha;
    }
    
    public void setSenha(String senha)
    {
        this.senha = senha;
    }
}

Essa é a class DAO que puxa os valores do banco:

/*
 * DAOUsuario.java
 *
 * Created on 17 de Julho de 2007, 22:18
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package DAO;


import java.io.*;
import java.net.*;
import java.util.*;

import java.sql.*;

import conexao.Conexao;
import Interfaces.ClassArray;

  

/**
 *
 * @author alexandre
 */
public class DAOUsuario 
{
    private String nome;
    private String usuario;
    
    private ResultSet rs;
    private Connection conn;
    private Statement sql; 

    //private ArrayList lista;
    /** Creates a new instance of DAOUsuario */
    public DAOUsuario() throws SQLException, IOException
    {
     conn = Conexao.connect();
    }
    
    public void setNome(String aNome) throws SQLException, IOException
    {
     nome = aNome;
     
      PreparedStatement  sql = conn.prepareStatement("select * from tabela where usuario = ?");
      sql.setString(1,nome);
      
     rs = sql.executeQuery();
      
      while(rs.next())
      {
        usuario = rs.getString("nome");
      }
     
     
     
    }
    
    public  List getLista() throws SQLException
    {
        PreparedStatement sql = conn.prepareStatement("select * from tabela");
        rs = sql.executeQuery();
        
        List lista = new ArrayList();
        
        while(rs.next())
        {
            lista.add(rs.getString("nome"));
        }
        
        return lista;        
        
    }
    
    public List getDados() throws SQLException
    {
        PreparedStatement sql = conn.prepareStatement("select * from tabela");
        rs = sql.executeQuery();
        
        List dados = new ArrayList();
        ClassArray array;
        while(rs.next())
        {
            array = new ClassArray();
            array.setNome(rs.getString("nome"));
            array.setCargo(rs.getString("cargo"));
            array.setUsuario(rs.getString("usuario"));
            array.setSenha(rs.getString("senha"));
            
            dados.add(array);
        }
        
        return dados;
    }
    
    public String getUsuario()
    {
        return usuario;
    }
    
    
    
}

Essa é a class que joga na JSP:

/*
 * ValidaUsuario.java
 *
 * Created on 17 de Julho de 2007, 22:04
 */

package Validacao;


import DAO.DAOUsuario;
import java.io.*;
import java.net.*;
import java.sql.SQLException;

import javax.servlet.*;
import javax.servlet.http.*;

import Interfaces.InterfaceUsuario;

/**
 *
 * @author alexandre
 * @version
 */
public class ValidaUsuario extends HttpServlet {
    
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    
    private String nome;
    private String usuario;
    private int erro;
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException, SQLException 
    {
    
        nome = request.getParameter("nome");
      //  System.out.println("nome teste :" + nome);
        InterfaceUsuario validar = new InterfaceUsuario();
        
        validar.setNome(nome);
        erro = validar.getErro();
        
          
        if(erro == 0)
        {
     
          DAOUsuario resultado = new DAOUsuario();
          resultado.setNome(nome);
          
          request.setAttribute("usuario",resultado);
                   
          RequestDispatcher view = request.getRequestDispatcher("home.jsp");
          view.forward(request,response);
        }
        else
        {
            System.out.println("Erro aqui");            
        }
        
        
    }
    
}

Essa é a JSP:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib  prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

    <h1>JSP Page<br></h1>

        String de nome simples: <font color="red"> ${usuario.usuario} </font><br>
        <br>
        exemplo de List 1:<font color="blue">
            <table>
                <c:forEach var="nomes" items="${usuario.lista}">
                    <tr>
                        <td>${nomes}</td>
                    </tr>
                    
                </c:forEach>
        </table></font><br><br>
          exemplo de List 2:<font color="blue">
            <table>
          <c:forEach var="detalhes" items="${usuario.dados}">
                    <tr>
                        <td>${detalhes}</td>
                    </tr>
                    
          </c:forEach>
        </table>
    </body>
</html>

Alguém pode me explicar porque o segundo List exibiu esses dados? E como eu corrijo isso?

6 Respostas

antoniopopete

Na primeira lista você fez uma coleção de String e o metodo toString mostra o valor das Strings,na segunda voce cria uma lista de ClassArray então ele usa o toString dessa classe que é essas “coisas estranhas” que voce mensionou.
Entendeu?
Se você quiser mudar isso,teria que sobrescrever o método toString na sua classe ClassArray

Aqui existem posts com duvidas soobre toString:

http://www.guj.com.br/posts/list/49820.java

http://www.guj.com.br/posts/list/40401.java

http://www.javapractices.com/Topic55.cjp

http://beginner-java-tutorial.com/java-tostring.html

diogo.delgaudio

tb tava tendo erros assim.

alexandremanowar

E ae blz

Então cara estudei os links que vc deixou e acho que eu entendi mais ou menos. Como estou sem java aqui no momento vou fazer um exemplo e vcs me informam se estou fazendo certo.
No caso na class ClassArray eu teria que pegar essa parte por exemplo:

public class ClassArray    
{   
    private String nome;   
    private String cargo;   
    private String usuario;   
    private String senha;   
       
       
    public String getNome()   
    {   
        return nome;   
    }   
    .....
}

e mudar para deixar dessa forma:

public class ClassArray    
{   
    private String nome;   
    private String cargo;   
    private String usuario;   
    private String senha;   
       
       
    public toString getNome()   
    {   
        return nome;   
    }   
  ...
}

Ou seja mudar de String para toString. É isso ou ainda estou errando?

fec

alexandremanowar:

public toString getNome()   
    {   
        return nome;   
    }

Ou seja mudar de String para toString. É isso ou ainda estou errando?

Aê amigo,sobscreve o metodo toString().
No caso seria assim:

public String toString(){ ... }

antoniopopete

public String toString () { return getNome(); }
Funcionaria…

alexandremanowar

E ae galera blz!

Então andei estudando melhor a e vi que a minha falha mesmo estava na EL aí eu corrigi deixando assim:

<c:forEach var="detalhes" items="${usuario.dados}">
                    <tr>
                        <td><c:out value="${detalhes.nome}" /> <c:out value="${detalhes.cargo}" /> <c:out value="${detalhes.usuario}" /> <c:out value="${detalhes.senha}" /></td>
                    </tr>
                    
          </c:forEach>

Dessa forma funcionou blz!

Aproveitando esse tópico e se eu quiser fazer essa função ao invés de criar uma class como a ClassArray que eu usei e capturar os dados e jogar em um List, será que é possível fazer isso usando apenas um HasMap? Eu andei lendo sobre o HasMap e vi que é possível fazer isso, porém algumas pessoas que trabalham com java disseram que usando a class como eu fiz fica mais orientado a objeto e seria mais correto.
Gostaria de opiniões sobre isso! POrque me pareceu que com HasMap era mais simples.

Valeu

Criado 27 de agosto de 2007
Ultima resposta 28 de ago. de 2007
Respostas 6
Participantes 4