Melhorando a EL

E a e galera blz

Eu estou testando EL esta funcionando legal. o que eu gostaria de aprender é o seguinte até agora eu estou exibindo dados simples com EL tipo faço uma consulta no banco e envio o resultado para uma JSP e imprimo o resultado usando a EL. Eu gostaria de aprender 2 coisas:

1)Como eu faço uma consulta no banco e quardo todas as informações do banco dentro de um Array tipo nome,endeço,etc. Então se no banco tiver 20 linhas as 20 linhas vão ficar no array com seus dados.

2)enviar esse array para o JSP e capturar tudo com a EL e exbir na tela.

Alguém poderia me explicar como fazer isso?

Olha como fiz meu código de consulta simples:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<!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</h1>
    <br/>
    <form method="POST" action="Home.do">
        
        nome: <input type="text" name="nome"> &nbsp<input type="submit" value="Consultar">
    </form>  
   
    </body>
</html>
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>


<!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>

        Nome: <font color="red"> ${usuario.usuario} </font>
    </body>
</html>
/*
 * 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");            
        }
        
        
    }
    
 
}
/*
 * InterfaceUsuario.java
 *
 * Created on 17 de Julho de 2007, 22:07
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package Interfaces;

/**
 *
 * @author alexandre
 */
public class InterfaceUsuario 
{
    
    private String nome;
    private int erro = 0;
    /** Creates a new instance of InterfaceUsuario */
    public InterfaceUsuario() 
    {
   
    }
    
    public void setNome(String Nome)
    {
     this.nome = Nome;   
     
     if(nome.length()<1)
     {
         erro = 1;
     }
     
    }
    
    public String getNome()
    {
        return nome;
    }
    
    public int getErro()
    {
        return erro;
    }
    
}
/*
 * 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;

  

/**
 *
 * @author alexandre
 */
public class DAOUsuario 
{
    private String nome;
    private String usuario;
    
    private ResultSet rs;
    private Connection conn;
    private Statement sql; 
    /** 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 senhadeals where usuario = ?");
      sql.setString(1,nome);
      
     rs = sql.executeQuery();
      
      while(rs.next())
      {
        usuario = rs.getString("nome");
      }
     
    }
    
    public String getUsuario()
    {
        return usuario;
    }
    
}

Dessa forma eu capturo um valor do banco e exibo na EL, mas o q eu quero aprender é como capturar tudo em um array e captura na EL.

Obtenha uma lista de dados do modelo, envie para a requisição e utilize a JSTL com EL para mostrar os dados na tela.

Exemplo:

<c:forEach items="${listaDados}" var="lista">
               
           ${lista.nome}

</c:forEach>

E ae cara blz

Não entendi muito bem. Você falou para pegar uma lista de dados do modelo, essa parte eu não sei fazer, como eu faço?
Agora o código que vc colocou do JSTL eu entendi ± acredito que isso ${listaDados} é o attributo onde armazenei a lista mas não entedi essa parte var=“lista” e essa: ${lista.nome}

Você poderia me explicar eu já estou estudando JSTL mas não entendi p q vc explicou aí

Valeu

Você vai fazer algo como:

DAO:


public List listarUsuarios(Usuario usuario) {

  //Aqui você executa o select para buscar os usuários no banco

  List listaUsuarios = new ArrayList();
  
  //Aqui você varre o objeto ResultSet para preencher a lista listaUsuarios
  
  listaUsuarios.add(usuario);

}

Servlet:


//No método processRequest:

request.setAttribute("listaDados",resultado.listarUsuarios(usuario));

JSP:

[code]

<c:forEach items="${listaDados}" var="lista">

       $&#123;lista.nome&#125;

</c:forEach> [/code]

A variável listaDados do forEach é o atributo setado na requisição no Servlet.

O atributo lista (do var) é o nome dado a lista.

${lista.nome} é o mesmo que: usuario.getNome();

Tutoriais sobre JSTL:

:arrow: Introdução a JSTL
:arrow: JSTL um pouco mais a fundo
:arrow: Introdução a JSTL - II

Agora entendi cara valeu.
Vou praticar aqui assim que eu conseguir fazer eu posto o código aqui para vcs avaliaram.

Valeu

Ok Alexandre, boa sorte. :joia:

Dicas, inves de usar o EL direto para imprimir

$&#123;lista.nome&#125; 

use JSTL

&lt;c&#58;out value=&quot;$&#123;lista.nome&#125;&quot;&gt;

A tag c:out codifica a String para que não cause dano ao HTML.

O link abaixo tem uns tuto legal sobre JSTL.

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSTL2.html

Ea e galera blz

Então eu fiz um arrayList aqui e não esta funcionando olha o código:
Nesse código eu passo duas váriaveis, uma string simples e um list:

Essa class faz a consulta no banco

/*
 * DAOUsuario.java
 *
 * Created on 17 de Julho de 2007, 22&#58;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;

  

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

    /** Creates a new instance of DAOUsuario */
    public DAOUsuario&#40;&#41; throws SQLException, IOException
    &#123;
     conn = Conexao.connect&#40;&#41;;
    &#125;
    
    public void setNome&#40;String aNome&#41; throws SQLException, IOException
    &#123;
     nome = aNome;
     
      PreparedStatement  sql = conn.prepareStatement&#40;&quot;select * from tabela where usuario = ?&quot;&#41;;
      sql.setString&#40;1,nome&#41;;
      
     rs = sql.executeQuery&#40;&#41;;
      
      while&#40;rs.next&#40;&#41;&#41;
      &#123;
        usuario = rs.getString&#40;&quot;nome&quot;&#41;;
      &#125;
     
     
     
    &#125;
    
    public  List getLista&#40;&#41; throws SQLException
    &#123;
        PreparedStatement sql = conn.prepareStatement&#40;&quot;select * from tabela&quot;&#41;;
        rs = sql.executeQuery&#40;&#41;;
        
        List lista = new ArrayList&#40;&#41;;
        
        while&#40;rs.next&#40;&#41;&#41;
        &#123;
            lista.add&#40;rs.getString&#40;&quot;nome&quot;&#41;&#41;;
        &#125;
        
        return lista;        
        
    &#125;
    
    public String getUsuario&#40;&#41;
    &#123;
        return usuario;
    &#125;
    
    
    
&#125;

Essa class recebe os dados capturados do banco pela class acima:

/*
 * ValidaUsuario.java
 *
 * Created on 17 de Julho de 2007, 22&#58;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 &#123;
    
    /** Processes requests for both HTTP &lt;code&gt;GET&lt;/code&gt; and &lt;code&gt;POST&lt;/code&gt; methods.
     * @param request servlet request
     * @param response servlet response
     */
    
    private String nome;
    private String usuario;
    private int erro;
    
    protected void processRequest&#40;HttpServletRequest request, HttpServletResponse response&#41;
    throws ServletException, IOException, SQLException 
    &#123;
    
        nome = request.getParameter&#40;&quot;nome&quot;&#41;;
    
        InterfaceUsuario validar = new InterfaceUsuario&#40;&#41;;
        
        validar.setNome&#40;nome&#41;;
        erro = validar.getErro&#40;&#41;;
        
          
        if&#40;erro == 0&#41;
        &#123;
     
          DAOUsuario resultado = new DAOUsuario&#40;&#41;;
          resultado.setNome&#40;nome&#41;;
          
          request.setAttribute&#40;&quot;usuario&quot;,resultado&#41;;
          request.setAttribute&#40;&quot;lista&quot;,resultado.getLista&#40;&#41;&#41;;
          
          RequestDispatcher view = request.getRequestDispatcher&#40;&quot;home.jsp&quot;&#41;;
          view.forward&#40;request,response&#41;;
        &#125;
        else
        &#123;
            System.out.println&#40;&quot;Erro aqui&quot;&#41;;            
        &#125;
        
        
    &#125;
    

&#125;

Essa é a jsp que imprime os resultados na tela:

&lt;%@page contentType=&quot;text/html&quot;%&gt;
&lt;%@page pageEncoding=&quot;UTF-8&quot;%&gt;


&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;
   &quot;http&#58;//www.w3.org/TR/html4/loose.dtd&quot;&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
        &lt;title&gt;JSP Page&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;

    &lt;h1&gt;JSP Page&lt;br&gt;&lt;/h1&gt;

        String de nome simples&#58; &lt;font color=&quot;red&quot;&gt; $&#123;usuario.usuario&#125; &lt;/font&gt;&lt;br&gt;
        Lista de nomes com List&#58;&lt;font color=&quot;blue&quot;&gt;
        &lt;table&gt;
            &lt;c&#58;forEach var=&quot;nomes&quot; items=&quot;$&#123;lista&#125;&quot;&gt;
                &lt;tr&gt;
                    &lt;td&gt;$&#123;nomes&#125;&lt;/td&gt;
                &lt;/tr&gt;
                
            &lt;/c&#58;forEach&gt;
            
        &lt;/table&gt;
    &lt;/body&gt;
&lt;/html&gt;

Ele siplesmente não esta exibindo nada na lista. Onde estou errando?

Fiz uns testes diferentes mas os que não deram erro de página ficou em branco também
Alguém pode corrigir esse meu código? Onde estou errando?
Valeu a todos

Alexandre, parece que seu JSP tem um problema: você não está declarando a diretiva taglib, que descreve a tag da JSTL que será utilizada na página.

&lt;%@ taglib uri=&quot;http&#58;//java.sun.com/jstl/core&quot; prefix=&quot;c&quot; %&gt;

Fique atento para os erros que possam estar sendo gerados no console. Outra coisa, tente utilizar um framework de Logging para logar seus servlets :wink:

E ae blz

Cara funcionou legal! Não acredito que passei horas refazendo e olhando esse código tantas vezes e deixei isso passar batido.
Cara Valeu mesmo pela força

Aproveitando o tópico nesse exemplo que eu fiz eu pego o campo nome da minha tabela e coloco dentro do List e se eu quiser pegar as outras colunas na tabela tipo endereco,bairro e cep automáticamente o resultado seria:

Alexandre endereco bairro cep
Administrador Filial endereco bairro cep
Marcia laura endereco bairro cep
André Muraro endereco bairro cep
André Muraro endereco bairro cep

É possível colocar colunas na linha do array, porque o que fiz no exemplo anterior foi criar um array de linhas e se precisar criar um com linhas e colunas é possível? Como eu faço?

Valeu

Não ficou muito claro para mim o que você precisa. Mê dá uma ajuda com um exemplo melhor.

E ae cara blz

Então é o seguinte esse que eu fiz eu armazenei no List os dados da coluna nome da minha tabela. Logo ele jogou todos os nomes no meu List.
Esse é o código certo:

public  List getLista&#40;&#41; throws SQLException 
    &#123; 
        PreparedStatement sql = conn.prepareStatement&#40;&quot;select * from tabela&quot;&#41;; 
        rs = sql.executeQuery&#40;&#41;; 
        
        List lista = new ArrayList&#40;&#41;; 
        
        while&#40;rs.next&#40;&#41;&#41; 
        &#123; 
            lista.add&#40;rs.getString&#40;&quot;nome&quot;&#41;&#41;; 
        &#125; 
        
        return lista;        
        
    &#125; 

Aí basta eu exibir os dados do List que ele mostra todos os nomes.
Porém na minha tabela tem os campos nome,endereco,bairro e cep eu gostaria de jogar no List todas essas informações! Dessa forma quando eu exibir os dados do meu List na tela não vai exibir só o nome mas sim todos os dados da pessoa.

Consegui passar bem a informação? Se consegui me e vc souber me ajude por favor se não tento explicar melhor (mas acho que não consigo rsrs)
Valeu pela força