Taglib

8 respostas
simberg

Estou fazendo lançamento em uma página jsp, seguindo o padrão MVC, tenho usado com sucesso listas no DAO, acessando um banco de dados e acessando no jsp com taglibs.

Porém dessa vez no DAO, fiz a seguinte lista, sem receber informações de um banco de dados, mas recebendo dados de uma servlet:

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

			list_cpf.add(c1);
			
		return list_cpf;
			
	}

Mas, ao inserir as tags na página JSP para aparecer as informações.

<jsp:useBean id="dao"  class="br.direito.defesas.dao.ContatoDAO" />
   
		<c:forEach var="contatoprofessores" items="${dao.lista_cpf}" 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}" />

Aparece a seguinte mensagem:

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_cpf" 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:476)
	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_cpf" 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_out_0(org.apache.jsp.form_005fcad_005fprofessor_005fcpf_jsp:491)
	org.apache.jsp.form_005fcad_005fprofessor_005fcpf_jsp._jspService(org.apache.jsp.form_005fcad_005fprofessor_005fcpf_jsp:270)
	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.

Dizendo que não encontra valor.

Para testar fui no DAO e coloquei um system.out.println(contato_p.getNome_professor()); E o valor é exibido no Eclipse. Ou seja o valor está vindo no momento da solicitação, mas não é inserido na página JSP.

Alguém poderia me ajudar?

8 Respostas

V

Não esta dando certo pq ao se usar . tipo atributo.nome só ira recuperar o valore se o elemento da direita da direita for uma propriedade bean ou uma chave map map. Para solucionar o problema Adicione a lista de cpf como um atributo de sua solicitacao.
Atenciosamente.

simberg

Obrigado Vagner.oliveira2 pela resposta rápida, porém estou com dúvida.

ContatoProfessores é uma classe javabean.

Quando uso com banco de dados, assim por exemplo:

public List<ContatoProfessores> getLista_pcpf() throws SQLException{
		PreparedStatement stmt=this.connection.prepareStatement("SELECT * FROM professores where idp="+idpx);
		ResultSet rs=stmt.executeQuery();
		
		ArrayList<ContatoProfessores>list_pcpf = new ArrayList<ContatoProfessores>();
		while(rs.next()){
			ContatoProfessores c1=new ContatoProfessores();
			
						
			c1.setIdp(rs.getInt("idp"));
			c1.setNome_professor(rs.getString("nome_professor"));
			c1.setAgencia(rs.getString("agencia"));
			c1.setBairro(rs.getString("bairro"));
			c1.setBanco(rs.getString("banco"));
			c1.setCep(rs.getString("cep"));
			c1.setCidade(rs.getString("cidade"));
			c1.setConta(rs.getString("conta"));
			c1.setCpf(rs.getString("cpf"));
			c1.setDepto(rs.getInt("depto"));
			c1.setEndereco(rs.getString("endereco"));
			c1.setEstacionamento(rs.getBoolean("estacionamento"));
			c1.setEstado(rs.getString("estado"));
			c1.setHotel(rs.getBoolean("hotel"));
			c1.setInstituicao(rs.getInt("instituicao"));
			c1.setObs(rs.getString("obs"));
			c1.setPassagem(rs.getBoolean("passagem"));
			c1.setPis(rs.getString("pis"));
			c1.setRg(rs.getString("rg"));
			c1.setTelefone(rs.getString("telefone"));
			
			list_pcpf.add(c1);
		}
		rs.close();
		stmt.close();
		return list_pcpf;
	}

Acessando um banco de dados, funciona perfeitamente.

O que há de diferente para não funcionar?

O valor value="${contatoprofessores.nome_professor}" , nome_professor é um atributo de uma classe bean.

Não estou entendendo bem sua recomendação, como faria essa inclusão?

Obrigado.

simberg

Só para testar se as informações estavam ou não chegando, forcei essa situação.

public List<ContatoProfessores> getLista_cpf(ContatoProfessores contato_p){
		
		ArrayList<ContatoProfessores>list_cpf = new ArrayList<ContatoProfessores>();
			
				ContatoProfessores c1 = new ContatoProfessores();
			
				c1.setNome_professor("marcos");
				c1.setDepto(1);
				c1.setInstituicao(1);
				c1.setCpf("25");		
		/*		c1.setRg(contato_p.getRg());
				c1.setPis(contato_p.getPis());
				c1.setBanco(contato_p.getBanco());
				c1.setAgencia(contato_p.getAgencia());
				c1.setConta(contato_p.getConta());
				c1.setEndereco(contato_p.getEndereco());
				c1.setBairro(contato_p.getBairro());
				c1.setCep(contato_p.getCep());
				c1.setCidade(contato_p.getCidade());
				c1.setEstado(contato_p.getEstado());
				c1.setTelefone(contato_p.getTelefone());
				c1.setPassagem(contato_p.getPassagem());
				c1.setHotel(contato_p.getHotel());
				c1.setEstacionamento(contato_p.getEstacionamento());
				c1.setObs(contato_p.getObs());
			*/
				list_cpf.add(c1);
				
				
		return list_cpf;
			
	}

inclui os dados manualmente.

Mesmo assim a resposta continua sendo a mesma. O que será?

simberg

Será que alguém poderia me ajudar?

gomesrod

Preste bem atenção na assinatura do método:

public List<ContatoProfessores> getLista_cpf(ContatoProfessores contato_p) throws SQLException{....}

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!

Veja a diferença em relação ao outro caso, o que está funcionando:

public List<ContatoProfessores> getLista_pcpf() throws SQLException{ ... }
simberg

Verdade.

Obrigado.

Vamos ver como faço isso funcionar agora.

simberg

Consegui resolver,

valeu pela força;

paolo.ramos

Tem 25 minutos de vídeo sobre JSTL+Taglibs em geral nesse site

http://spartaconsultoria.com.br/home/index.php/video-aulas/26-ho-002-construindo-custom-tags

o material é bem legal, bom pra quem está começando!..da uma olhada lá!

Criado 27 de agosto de 2009
Ultima resposta 4 de nov. de 2009
Respostas 8
Participantes 4