O que há de errado nessa lista?

22 respostas
simberg
public List<ContatoProfessores> getLista_cpd(ContatoProfessores c1){
			
		ArrayList<ContatoProfessores>list_cpd = new ArrayList<ContatoProfessores>();
		
			c1.setIdp(null);
			c1.setNome_professor(c1.getNome_professor());
			c1.setRg(c1.getRg());
			c1.setPis(c1.getPis());
			c1.setBanco(c1.getBanco());
			c1.setAgencia(c1.getAgencia());
			c1.setConta(c1.getConta());
			c1.setEndereco(c1.getEndereco());
			c1.setBairro(c1.getBairro());
			c1.setCep(c1.getCep());
			c1.setCidade(c1.getCidade());
			c1.setEstado(c1.getEstado());
			c1.setTelefone(c1.getTelefone());
			c1.setPassagem(c1.getPassagem());
			c1.setHotel(c1.getHotel());
			c1.setEstacionamento(c1.getEstacionamento());
			c1.setObs(c1.getObs());
			c1.setCpf(c1.getCpf());
			c1.setDepto(c1.getDepto());
			c1.setInstituicao(c1.getInstituicao());
			
			list_cpd.add(c1);
			
		return list_cpd;
	}

Tem algo errado nesse código?

22 Respostas

Guinter

Opa, apresenta algum erro ao rodar? olhando assim a princípio não tem algo errado.

wandersonxs

Aparentemente não…

Qual erro está ocorrendo?

Abraços
Wanderson

simberg

Se eu colocar um system.out.println(c1.getNome_professor()); aparece no console o valor certinho, porém qdo tento usar a lista em uma página jsp, diz que não há valor.

Unable to find a value for “lista_cpd” in object of class “br.direito.defesas.dao.ContatoDAO” using operator “.”

Na página jsp troquei a chamada por outra lista e funciona, então o erro não está na página jsp e sim nesse código que passei que não guarda valores na lista.

simberg

Uma parte da página jsp.

<jsp:useBean id="dao"  class="br.direito.defesas.dao.ContatoDAO" />
   
		<c:forEach var="contatoprofessores" items="${dao.lista_cpd}" varStatus="status">
      
      <table width="780" border="0" bordercolor="#333333">
        <!--DWLayoutTable-->
        <tr> 
          <td height="33" colspan="9" valign="top" align="left"><p><font face="Arial, Helvetica, sans-serif">Nome:</font><font size="-2" face="Arial, Helvetica, sans-serif">  
            &nbsp;&nbsp;&nbsp;<input name="txtNome" type="text" size="110" maxlength="170" value="${contatoprofessores.nome_professor}" />
            </font></p>        </td>
Guinter

Posta a página pra gente verificar.

Jiraiya

Não sei o que vem antes do método em questão, mas você não está verificando se o objeto “c1” está null, ou seja pode ocorrer NullPointerException!
Uma coisa que eu não entendi foi você estar setando novamente os atributos de “c1”, se for apenas por causa do Id, podia setar apenas ele e depois add na lista normalmente sem precisar setar tudo de novo.

Dica na declaração da lista fica melhor você fazer assim…

List<ContatoProfessores>list_cpd = new ArrayList<ContatoProfessores>();

Pois caso você tenha que mudar de ArrayList para outro tipo, como por exemplo LinkedList, não haverá um impacto tão grande.

Acho que o pior seria o possível NullPointerException, se puder poste o restante do código para analisarmos melhor e te ajudar.

Abs

simberg

Coloquei system.out.println(c1.getNome_professor()) e apareceu valor no console, então o valor não é null.

Estou recebendo os dados de uma servlet

ContatoDAO dao=null;
			try{
				dao=new ContatoDAO();
				dao.getLista_cpd(contato_p);
			}catch(SQLException e){
				e.printStackTrace();
			}
			
			response.sendRedirect("form_cad_professor_cpf.jsp");
Guinter

de onde esta vindo o objeto “ContatoProfessores c1” que chega a list?

Guinter

posso estar errado mas o nome List_cpd não seria getLista_cpd lá na jsp?

simberg

Da servlet que coloquei parte do código.

Mas, como falei o valor está sendo passado, mas não está indo para a página jsp.

simberg

Não, na verdade quando vc trabalha com jstl vc suprime.

Guinter

Tenta o seguinte pega o retorno da sua servlet e coloca na sessão, depois só usa na página a variável sem o bean no forEach pra ver se pega os valores.

simberg

Mudei a lista para:

public List getLista_cpd(ContatoProfessores c1){  
		            
		       ArrayList list_cpd = new ArrayList();  
		         
		          c1.setIdp(null);  
		          c1.setNome_professor(c1.getNome_professor());  
		          c1.setRg(c1.getRg());  
		          c1.setPis(c1.getPis());  
		          c1.setBanco(c1.getBanco());  
		          c1.setAgencia(c1.getAgencia());  
		          c1.setConta(c1.getConta());  
		          c1.setEndereco(c1.getEndereco());  
		          c1.setBairro(c1.getBairro());  
		          c1.setCep(c1.getCep());  
		          c1.setCidade(c1.getCidade());  
		          c1.setEstado(c1.getEstado());  
		          c1.setTelefone(c1.getTelefone());  
		          c1.setPassagem(c1.getPassagem());  
		          c1.setHotel(c1.getHotel());  
		          c1.setEstacionamento(c1.getEstacionamento());  
		          c1.setObs(c1.getObs());  
		          c1.setCpf(c1.getCpf());  
		          c1.setDepto(c1.getDepto());  
		          c1.setInstituicao(c1.getInstituicao());  
		            
		          list_cpd.add(c1);  
		          System.out.println(c1.getNome_professor());  
		       return list_cpd;  
		    }

Mas o resultado foi o mesmo, mesmo no console aparecer o valor que pedi.

A página de erro:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Unable to find a value for "lista_cpd" in object of class "br.direito.defesas.dao.ContatoDAO" using operator "."
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
	org.apache.jsp.form_005fcad_005fprofessor_005fcpf_jsp._jspService(org.apache.jsp.form_005fcad_005fprofessor_005fcpf_jsp:375)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

javax.servlet.jsp.el.ELException: Unable to find a value for "lista_cpd" in object of class "br.direito.defesas.dao.ContatoDAO" using operator "."
	org.apache.commons.el.Logger.logError(Logger.java:481)
	org.apache.commons.el.Logger.logError(Logger.java:498)
	org.apache.commons.el.Logger.logError(Logger.java:611)
	org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:340)
	org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:263)
	org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
	org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:922)
	org.apache.jsp.form_005fcad_005fprofessor_005fcpf_jsp._jspx_meth_c_forEach_0(org.apache.jsp.form_005fcad_005fprofessor_005fcpf_jsp:391)
	org.apache.jsp.form_005fcad_005fprofessor_005fcpf_jsp._jspService(org.apache.jsp.form_005fcad_005fprofessor_005fcpf_jsp:271)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.12 logs.
Guinter

tenta essas modificações:

na servlet:

ArrayList<ContatoProfessores> exemplo = new ArrayList<ContatoProfessores>();
                exemplo = (ArrayList<ContatoProfessores>) dao.getLista_cpd(contato_P);
                request.setAttribute("professor",exemplo);
		response.sendRedirect("form_cad_professor_cpf.jsp");

na página sem o bean:

<c:forEach var="contatoprofessores" items="${exemplo}" varStatus="status">


<input name="txtNome" type="text" size="110" maxlength="170" value="${exemplo.nome_professor}" />
Guinter

opa errei aqui fica assim:

<input name="txtNome" type="text" size="110" maxlength="170" value="${contatoProfessores.nome_professor}" />
Jiraiya

Vou dar um chute, mas possa ser isso.

A lista “list_cpd” só é declarada dentro do método getLista_cpd ??

Se for assim você estaria tentando acessar um atributo da classe ContatdoDAO, mas que na verdade só existe na execução do método.

simberg

Guinter
Obrigado pela força.

Eu estava pensando em fazer isso.

Na verdade eu tenho uma página que o usuário cadastra um professor.

Esses dados vão para uma servlet que analisa, chamando uma outra classe que olha o CPF, se estiver correto faz a inclusão do professor. Está funcionando ok.

Se o CPF estiver incorreto, pega os dados e envia para essa lista que é chamada pela jsp onde deveria preencher os campos de nome, endereço, deixando apenas o CPF para ser corrigido pelo usuário.
Se não desse certo, e não entendo pq não. Estava pensando em colocar em variável de sessão essas informações, apesar de achar o que estou fazendo um trabalho mais correto.

simberg

Achei o erro, aliás me mostraram.

Quando você chama da seguinte forma items="${dao.lista_cpf}", espera-se que o método seja um acessor no padrão javabeans - o famoso “getter”. É aí que está seu erro, um getter não leva parâmetros!

não posso

public List<ContatoProfessores> getLista_cpd(ContatoProfessores c1){

Funciona perfeitamente quando não coloco parâmetros e acesso acessando um banco de dados.

Guinter

Show de bola velho.

simberg

a

simberg

Consegui, daqui a pouco posto aqui.

Valeu a todos.

simberg

Como com get não posso passar parâmetros para o DAO.

Fiz assim:

Criei o atributo no DAO.

private static ContatoProfessores contato_p;

depois um setLista para pegar as informações

public static void setLista_cpd(ContatoProfessores c1)throws SQLException{
		contato_p=c1;
	}

E o getLista para gerar a lista para o jsp.

public List<ContatoProfessores> getLista_cpd(){
			
		ArrayList<ContatoProfessores>list_cpd=new ArrayList<ContatoProfessores>();
		ContatoProfessores c1= contato_p;
		
		c1.setIdp(null);
		c1.setNome_professor(c1.getNome_professor());
		c1.setRg(c1.getRg());
		c1.setPis(c1.getPis());
		c1.setBanco(c1.getBanco());
		c1.setAgencia(c1.getAgencia());
		c1.setConta(c1.getConta());
		c1.setEndereco(c1.getEndereco());
		c1.setBairro(c1.getBairro());
		c1.setCep(c1.getCep());
		c1.setCidade(c1.getCidade());
		c1.setEstado(c1.getEstado());
		c1.setTelefone(c1.getTelefone());
		c1.setPassagem(c1.getPassagem());
		c1.setHotel(c1.getHotel());
		c1.setEstacionamento(c1.getEstacionamento());
		c1.setObs(c1.getObs());
		c1.setCpf(c1.getCpf());
		c1.setDepto(c1.getDepto());
		c1.setInstituicao(c1.getInstituicao());
			
		list_cpd.add(c1);	
		return list_cpd;
	}

No jsp continua igual.

Valeu pessoal.

Criado 28 de agosto de 2009
Ultima resposta 28 de ago. de 2009
Respostas 22
Participantes 4