Método Procura - The Method is not applicable for the arguments

Pessoal,
Estou fazendo uma aplicação que precisa pesquisar o endereço a partir de um CEP fornecido pelo usuário. Estou utilizando Jsp, JDBC, Mysql e Access( base de ceps ). O problema é que não consigo utilizar o método procura CEP que possuo, pois aparece a mensagem abaixo:

[code]java.lang.Error: Unresolved compilation problem:
The method procura(String) in the type CepDAO is not applicable for the arguments (Cep)

br.com.pizza.mvc.ProcuraCepLogic.execute(ProcuraCepLogic.java:21)
br.com.pizza.mvc.ControllerServlet.service(ControllerServlet.java:29)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)[/code]

Está é um trecho da classe de Modelo para o CEP:

[code]package br.com.pizza.jdbc.modelo;

public class Cep {

private String cep;
private String tipo;
private String bairro;
private String nome;

public String getCep() {
	return cep;
}
public void setCep(String cep) {
	this.cep = cep;
}

[/code]

Eis o meu método do meu DAO que deveria procurar o CEP:

[code] public Cep procura(String cep) throws SQLException {
PreparedStatement stmt = connection.prepareStatement(“select * from Cep where cep=?”);
stmt.setString(1, cep);
ResultSet rs = stmt.executeQuery();

	if(!rs.next()) return null;
	
	Cep c = new Cep();
	c.setCep(rs.getString("cep"));
	c.setTipo(rs.getString("tipo"));
	c.setNome(rs.getString("nome"));
	c.setBairro(rs.getString("bairro"));
	
	rs.close();
	stmt.close();
	return c; 
}[/code]

E este é a classe Logic que utiliza o método procura:

[code]package br.com.pizza.mvc;

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

import br.com.pizza.jdbc.dao.CepDAO;
import br.com.pizza.jdbc.modelo.Cep;

public class ProcuraCepLogic implements BusinessLogic {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println(“Executando a lógica e redirecionando…”);

		Cep cep = new Cep();
		cep.setCep(request.getParameter("cep"));
		
					
		CepDAO dao = new CepDAO();
		dao.procura(cep); // linha que apresenta problemas
	
		
		RequestDispatcher rd = 
			request.getRequestDispatcher("/testaCeps.jsp");
		rd.forward(request, response);
	
}

}[/code]

Poderiam me ajudar?

Você declarou no DAO o método procura para receber como parâmetro uma String, você está passando para ele um objeto do tipo CEP…

[quote=thiagotn]Pessoal,
Estou fazendo uma aplicação que precisa pesquisar o endereço a partir de um CEP fornecido pelo usuário. Estou utilizando Jsp, JDBC, Mysql e Access( base de ceps ). O problema é que não consigo utilizar o método procura CEP que possuo, pois aparece a mensagem abaixo:

[code]java.lang.Error: Unresolved compilation problem:
The method procura(String) in the type CepDAO is not applicable for the arguments (Cep)

br.com.pizza.mvc.ProcuraCepLogic.execute(ProcuraCepLogic.java:21)
br.com.pizza.mvc.ControllerServlet.service(ControllerServlet.java:29)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)[/code]

Está é um trecho da classe de Modelo para o CEP:

[code]package br.com.pizza.jdbc.modelo;

public class Cep {

private String cep;
private String tipo;
private String bairro;
private String nome;

public String getCep() {
	return cep;
}
public void setCep(String cep) {
	this.cep = cep;
}

[/code]

Eis o meu método do meu DAO que deveria procurar o CEP:

[code] public Cep procura(String cep) throws SQLException {
PreparedStatement stmt = connection.prepareStatement(“select * from Cep where cep=?”);
stmt.setString(1, cep);
ResultSet rs = stmt.executeQuery();

	if(!rs.next()) return null;
	
	Cep c = new Cep();
	c.setCep(rs.getString("cep"));
	c.setTipo(rs.getString("tipo"));
	c.setNome(rs.getString("nome"));
	c.setBairro(rs.getString("bairro"));
	
	rs.close();
	stmt.close();
	return c; 
}[/code]

E este é a classe Logic que utiliza o método procura:

[code]package br.com.pizza.mvc;

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

import br.com.pizza.jdbc.dao.CepDAO;
import br.com.pizza.jdbc.modelo.Cep;

public class ProcuraCepLogic implements BusinessLogic {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println(“Executando a lógica e redirecionando…”);

		Cep cep = new Cep();
		cep.setCep(request.getParameter("cep"));
		
					
		CepDAO dao = new CepDAO();
		dao.procura(cep); // linha que apresenta problemas
	
		
		RequestDispatcher rd = 
			request.getRequestDispatcher("/testaCeps.jsp");
		rd.forward(request, response);
	
}

}[/code]

Poderiam me ajudar?[/quote]

André, obrigado pela ajuda!!

Corrigi da seguinte forma:

[code]public class ProcuraCepLogic implements BusinessLogic {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println(“Executando a lógica e redirecionando…”);

		Cep cep = new Cep();
		cep.setCep((request.getParameter("cep")));
		
					
		CepDAO dao = new CepDAO();
		dao.getProcura(cep.getCep()); // agora estou passando a String Cep
		
		request.setAttribute("cep", cep); 
		
		
		RequestDispatcher rd = 
			request.getRequestDispatcher("/testeCeps2.jsp");
		rd.forward(request, response);
	
}

}[/code]

Agora estou com problemas para apresentar o resultado no /testeCeps2.jsp

O código do jsp está desta forma:

<jsp:useBean id="dao" class="br.com.pizza.jdbc.dao.CepDAO"/> <c:forEach var="cep" items="${cep}" > <tr><td>${cep.cep}</td> <td>${cep.tipo}</td> <td>${cep.nome}</td> <td>${cep.bairro}</td></tr> </c:forEach>

E o Erro é este:

SEVERE: Servlet.service() for servlet syp threw exception
javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt;
	at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:255)
	at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:219)
	at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:137)
	at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:227)
	at org.apache.jsp.testeCeps2_jsp._jspx_meth_c_005fforEach_005f0(testeCeps2_jsp.java:153)
	at org.apache.jsp.testeCeps2_jsp._jspService(testeCeps2_jsp.java:86)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
	at br.com.pizza.mvc.ProcuraCepLogic.execute(ProcuraCepLogic.java:28)
	at br.com.pizza.mvc.ControllerServlet.service(ControllerServlet.java:29)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

Eu estou usando um System.out.println para imprimir os dados depois da consulta que é feita no método procura pelo DAO e os dados são apresentados no console normalmente, ou seja, a consulta está correta mas agora o problema é que eu não consigo mostrar o endereço que foi pesquisado na página Jsp. :cry:

Poderiam me ajudar?

vc tentou imprimir o conteúdo e o tipo do ${cep} ?? o que ele mostra??

[]´s

Bom dia André!

Ao tentar imprimir o resultado aparece o Erro acima, como se não fosse possível fazer o forEach:

[code]# SEVERE: Servlet.service() for servlet syp threw exception

javax.servlet.jsp.JspTagException: Don’t know how to iterate over supplied “items” in

at[/code]

Uma dúvida: Para imprimir um único resultado no Jsp, como eu poderia fazer? Acho que o problema é porque estou tentando fazer um forEach, mas só tem um resultado.( não sei se isto faz sentido, sou café com leite :oops: )

se o objeto cep for, por exemplo, um ArrayList quando passar pelo foreach e estiver vazio ele não vai imprimir nada, um problema que pode acontecer é se o cep estiver com valor nulo, ai ao passar no foreach dá pau… tenta imprimir na classe java - e não na jsp - o valor do cep depois que ele é calculado, veja se está nulo…

[]´s

Então…Eu estou dando um System.out.println no próprio método que procura o Cep para ver se o cep está sendo procurado e ele imprime normalmente o resultado no console do Eclipse, mas para o Jsp em si parece que estes valores não estão sendo repassados.

Agora estou no trabalho, senão colocaria este código.

Oi,

Achei um tópico semelhante no guj

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

Tenta fazer igual ela fez usando o c:out

[code] <table border=1>

&lt;tr&gt;  
   &lt;td&gt;Grupo&lt;/td&gt;   
   &lt;td&gt;Descrição&lt;/td&gt;      
&lt;/tr&gt;  
&lt;c:forEach var="item" items="${grupos}"&gt;  
&lt;tr&gt;  
   &lt;td&gt;&lt;c:out value="${item.grupo}"/&gt;&lt;/td&gt;          
   &lt;td&gt;&lt;c:out value="${item.descricao}"/&gt;&lt;/td&gt;      
&lt;/tr&gt;      
&lt;/c:forEach&gt;  
&lt;/table&gt; [/code]

Vlw André, vou tentar isso e qq coisa retorno!!

Thiago,

Não sei se você já conseguiu resolver, mas lendo com mais calma o tópico agora eu pude ver que você está passando para o request um objeto do tipo CEP e está interando nele.
Na verdade você tem que passar uma Collection de objetos, como um ArrayList de Ceps, ai depois vc intera nele, algo parecido com isso:

Na classe Java

[code]CepDAO dao = new CepDAO();
dao.getProcura(cep.getCep());

List ceps = new ArrayList();
request.setAttribute(“ceps”, ceps); [/code]

Na jsp

<c:forEach var="cep" items="${ceps}" > <tr><td>${cep.cep}</td> <td>${cep.tipo}</td> <td>${cep.nome}</td> <td>${cep.bairro}</td></tr> </c:forEach>