Problema com AutoComplete

6 respostas
S

Olá Senhores, estou com uma dúvida:
Quero criar a partir de um resultset um Autocomplete, com Jquery, como fazer com que a Servlet possa usar um String Sql como parâmetro?
Abaixo a Servlet que quero Reaproveitar, obs: estou usando taglibs do Google(Gson)
Logo adiante o meu resultset que usa um nome para a pesquisa de um dado:

import java.io.IOException;

import java.util.ArrayList;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;
@WebServlet("/MyServlet")

public class MyServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,  
        HttpServletResponse response) throws ServletException, IOException {  
    String term = request.getParameter("term");  

    String[] valueBase = { "ActionScript", "AppleScript", "Asp", "BASIC",  
            "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang",  
            "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lua",  
            "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme" };  

    ArrayList<String> values = new ArrayList<String>();  
    if (term != null) {  
        for (String value : valueBase) {  
            if (value.startsWith(term)) {  
                values.add(value);  
            }  
        }  
    }  

    Gson gson = new Gson();  
    String jSon = gson.toJson(values);  
    System.out.println("term: " + term + " | json: " + jSon);  
    response.getWriter().write(jSon);  
    response.getWriter().flush();  
}  

protected void doPost(HttpServletRequest request,  
        HttpServletResponse response) throws ServletException, IOException {  
}

}

Resultset que quero aproveitar para obter o AutoComplete.


public List<Empresa> pesquisaEmpresas(String nome) throws SQLException {

List&lt;Empresa&gt; empresas = new ArrayList&lt;Empresa&gt;();  

    ResultSet rs = getResultSet(nome);  
    while (rs.next()) {  
        Empresa empresa = new Empresa();  
        empresa = new Empresa();  

        empresa.setCod_empresa(rs.getLong("cod_empresa"));  
        empresa.setNome(rs.getString("nome"));  
        empresa.setTelefone(rs.getString("Telefone"));  
        empresa.setEmail(rs.getString("Email"));  
        empresa.setSite(rs.getString("Site"));  
        empresa.setEndereco(rs.getString("Endereco"));  
        empresa.setDescricao(rs.getString("descricao"));  
        empresa.setPrioridade(rs.getLong("prioridade"));  
        empresa.setLogo(rs.getString("logo"));  

        empresas.add(empresa);  
    }  

    return empresas;  
}  

public ResultSet getResultSet(String nome) throws SQLException {  

    String sql = "select * from empresa where nome like '%" + nome  
            + "%'order by prioridade";  

    PreparedStatement stmt = this.connection.prepareStatement(sql);  

    ResultSet rs = stmt.executeQuery();  

    return rs;  
}  

public List&lt;Empresa&gt; listaDados(Long cod_empresa) throws SQLException {  
    List&lt;Empresa&gt; empresas = new ArrayList&lt;Empresa&gt;();  
    ResultSet rs = getResultSet(cod_empresa);  
    while (rs.next()) {  
        Empresa empresa = new Empresa();  
        // empresa = new Empresa();  

        empresa.setCod_empresa(rs.getLong("cod_empresa"));  
        empresa.setNome(rs.getString("nome"));  
        empresa.setTelefone(rs.getString("Telefone"));  
        empresa.setEmail(rs.getString("Email"));  
        empresa.setSite(rs.getString("Site"));  
        empresa.setEndereco(rs.getString("Endereco"));  
        empresa.setDescricao(rs.getString("descricao"));  
        empresa.setPrioridade(rs.getLong("prioridade"));  
        empresa.setLogo(rs.getString("logo"));  
        empresas.add(empresa);  
    }  
    return empresas;  
}

6 Respostas

nickdofeliperibeiro

Você vai instanciar a sua classe de controle e fazer chamada ao método.

Enfim, qual é a dificuldade? :slight_smile:

S

Como fazer a instância da listagem pela qual o objeto do tipo empresa será obtido e mostrado no input.

nickdofeliperibeiro

Entendi…

Então, preciso saber, o que você implementou na sua camada de modelo.

EJB ? Hibernate? JPA? (…)

Você pode verificar no projeto, se existe alguma chamada a algum método que vá ao BD?

S

JDBC, vou te mandar a classe DAO agora.

S
package br.com.lza.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.lza.modelo.Empresa;

/**
 * Classe que instancia a conex&#65533;o com o banco de dados
 * 
 * 
 */
public class EmpresaDAO {
	private Connection connection;

	public EmpresaDAO() throws SQLException {

		this.connection = new ConnectionFactory().getConnection();

	}

	/**
	 * Inclui um objeto empresa no banco de dados
	 * 
	 * @param empresa
	 * @throws SQLException
	 */
	public void adiciona(Empresa empresa) throws SQLException {
		String sql = "insert into empresa (nome,endereco,telefone,email,site, descricao, logo, prioridade )values (?,?,?,?,?,?,?,?)";
		PreparedStatement stmt = connection.prepareStatement(sql);

		stmt.setString(1, empresa.getNome());
		stmt.setString(2, empresa.getEndereco());
		stmt.setString(3, empresa.getTelefone());
		stmt.setString(4, empresa.getEmail());
		stmt.setString(5, empresa.getSite());
		stmt.setString(6, empresa.getDescricao());
		stmt.setString(7, empresa.getLogo());
		stmt.setLong(8, empresa.getPrioridade());
		stmt.execute();
		stmt.close();
	}

	/**
	 * Cria um lista de objetos empresa
	 * 
	 * @return
	 * @throws SQLException
	 */
	long incremento;
	long limite = incremento;
	long index = limite + 30;

	public List&lt;Empresa&gt; getLista() throws SQLException {
		PreparedStatement stmt = this.connection
				.prepareStatement("SELECT * FROM empresa order by nome LIMIT "
						+ limite + ", " + index);

		ResultSet rs = stmt.executeQuery();
		List&lt;Empresa&gt; empresas = new ArrayList&lt;Empresa&gt;();
		while (rs.next()) {
			Empresa empresa = new Empresa();
			empresa.setCod_empresa(rs.getLong("cod_empresa"));
			empresa.setPrioridade(rs.getLong("prioridade"));
			empresa.setNome(rs.getString("nome"));
			empresa.setEndereco(rs.getString("endereco"));
			empresa.setTelefone(rs.getString("telefone"));
			empresa.setEmail(rs.getString("email"));
			empresa.setSite(rs.getString("site"));
			empresa.setDescricao(rs.getString("Descricao"));
			empresa.setLogo(rs.getString("logo"));
			empresas.add(empresa);

		}
		rs.close();
		stmt.close();
		stmt.close();
		return empresas;
	}

	/**
	 * Atualiza o objeto no banco de dados com um sql update
	 * 
	 * @param empresa
	 */
	public void altera(Empresa empresa) throws SQLException {
		PreparedStatement stmt = connection
				.prepareStatement("update empresa set nome=Upper(?), endereco=?, telefone=?, email=lower(?), site=lower(?), descricao=?, prioridade=?, logo=lower(?) where cod_empresa=?");
		stmt.setString(1, empresa.getNome());
		stmt.setString(2, empresa.getEndereco());
		stmt.setString(3, empresa.getTelefone());
		stmt.setString(4, empresa.getEmail());
		stmt.setString(5, empresa.getSite());
		stmt.setString(6, empresa.getDescricao());
		stmt.setLong(7, empresa.getPrioridade());
		stmt.setString(8, empresa.getLogo());
		stmt.setLong(9, empresa.getCod_empresa());
		stmt.execute();
		stmt.close();
	}

	/**
	 * Apaga o objeto empresa do banco de dados passando o c&#65533;digo
	 * 
	 * @param empresa
	 * @throws SQLException
	 */
	public void remove(Empresa empresa) throws SQLException {
		PreparedStatement stmt = connection
				.prepareStatement("delete from empresa where cod_empresa=?");
		stmt.setLong(1, empresa.getCod_empresa());
		stmt.execute();
		stmt.close();
	}

	/**
	 * Consulta um objeto Empresa com o parametro nome da Empresa usando like
	 * para banco de dados
	 * 
	 * @param nome
	 * @return
	 * @throws SQLException
	 */

	/**
	 * Consulta um objeto Empresa com o parametro nome da Empresa usando like
	 * para banco de dados
	 * 
	 * @param nome
	 * @return
	 * @throws SQLException
	 */
	public List&lt;Empresa&gt; pesquisaEmpresas(String nome) throws SQLException {

		List&lt;Empresa&gt; empresas = new ArrayList&lt;Empresa&gt;();

		ResultSet rs = getResultSet(nome);
		while (rs.next()) {
			Empresa empresa = new Empresa();
			empresa = new Empresa();

			empresa.setCod_empresa(rs.getLong("cod_empresa"));
			empresa.setNome(rs.getString("nome"));
			empresa.setTelefone(rs.getString("Telefone"));
			empresa.setEmail(rs.getString("Email"));
			empresa.setSite(rs.getString("Site"));
			empresa.setEndereco(rs.getString("Endereco"));
			empresa.setDescricao(rs.getString("descricao"));
			empresa.setPrioridade(rs.getLong("prioridade"));
			empresa.setLogo(rs.getString("logo"));

			empresas.add(empresa);
		}

		return empresas;
	}

	public ResultSet getResultSet(String nome) throws SQLException {

		String sql = "select * from empresa where nome like '%" + nome
				+ "%'order by prioridade";

		PreparedStatement stmt = this.connection.prepareStatement(sql);

		ResultSet rs = stmt.executeQuery();

		return rs;
	}

	public List&lt;Empresa&gt; listaDados(Long cod_empresa) throws SQLException {
		List&lt;Empresa&gt; empresas = new ArrayList&lt;Empresa&gt;();
		ResultSet rs = getResultSet(cod_empresa);
		while (rs.next()) {
			Empresa empresa = new Empresa();
			// empresa = new Empresa();

			empresa.setCod_empresa(rs.getLong("cod_empresa"));
			empresa.setNome(rs.getString("nome"));
			empresa.setTelefone(rs.getString("Telefone"));
			empresa.setEmail(rs.getString("Email"));
			empresa.setSite(rs.getString("Site"));
			empresa.setEndereco(rs.getString("Endereco"));
			empresa.setDescricao(rs.getString("descricao"));
			empresa.setPrioridade(rs.getLong("prioridade"));
			empresa.setLogo(rs.getString("logo"));
			empresas.add(empresa);
		}
		return empresas;
	}

	public ResultSet getResultSet(Long Cod_empresa) throws SQLException {
		String sql = "select * from empresa where cod_empresa =?";
		PreparedStatement stmt = this.connection.prepareStatement(sql);
		stmt.setLong(1, Cod_empresa);
		ResultSet rs = stmt.executeQuery();
		return rs;
	}
}
S

esta, abaixo é a servlet pela qual estancio o método pelo qual obtenho as empresas pelo nome:

package br.com.lza.visao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.lza.dao.EmpresaDAO;
import br.com.lza.modelo.Empresa;

public class PesquisaEmpresaLogic implements BusinessLogic {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		System.out.println("Executando a lógica e redirecionando...");

		List&lt;Empresa&gt; empresas = new ArrayList&lt;Empresa&gt;();
		String nome = (request.getParameter("nome"));

		request.setAttribute("nome", nome);

		EmpresaDAO empresadao;

		try {

			empresadao = new EmpresaDAO();

			empresas = empresadao.pesquisaEmpresas(nome);
			if (empresas.isEmpty()) {
				RequestDispatcher rd = request
						.getRequestDispatcher("erropesq.jsp");
				rd.forward(request, response);
			} else {
				request.setAttribute("empresa", empresas);

				RequestDispatcher rd = request
						.getRequestDispatcher("resultpesq.jsp");
				rd.forward(request, response);
			}
		} catch (SQLException e) {
		}
	}
}
Criado 29 de novembro de 2011
Ultima resposta 30 de nov. de 2011
Respostas 6
Participantes 2