Iniciante em JSTL

8 respostas
B

Ola a todos
Esta é a minha primeira mensagem aqui no fórum. Não sei se postei no local adequado, se não desculpa…
Mas vamos ao problema… Estou lenda a apostila FJ-21, e estou no exercício da página 65 mas não tem jeito de fazer funcionar, e olhe que eu sou percistente em corrigir esse erros… ja pesquisei no google e nada. Quando rodo a aplicação da esse erro aqui:

type Exception report

message

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

exception

org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property 'nome' not found on type java.lang.String
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

javax.el.PropertyNotFoundException: Property 'nome' not found on type java.lang.String
	javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:193)
	javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:170)
	javax.el.BeanELResolver.property(BeanELResolver.java:279)
	javax.el.BeanELResolver.getValue(BeanELResolver.java:60)
	javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
	org.apache.el.parser.AstValue.getValue(AstValue.java:118)
	org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:925)
	org.apache.jsp.lista_002delegante_jsp._jspx_meth_c_005fforEach_005f0(lista_002delegante_jsp.java:109)
	org.apache.jsp.lista_002delegante_jsp._jspService(lista_002delegante_jsp.java:73)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

Alguém sabe o como corrigir isso?¿

Obs. Uso netbeans / Ubuntu

8 Respostas

zoren

talvez seja pq o seu objeto q vc colocou na pagina, não tem o atributo nome

coloca o código da pagina

pablouu

cara posta o seu código aí, me parece que vc está tentando usar a variável nome que não existe.

B
Ai estão os códigos.. JSP
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
    <!-- cria a lista -->
    <jsp:useBean id="dao" class="util.ContatoDAO" />

    <!-- for -->
    <c:forEach var="contato" items="${dao.lista} ">
        <li>
            Nome: ${contato.nome},
            Email: ${contato.email},
            Endereço: ${contato.endereco}
        </li>
    </c:forEach>
</html>
Contato
package teste;


public class Contato {

    private long id;
    private String nome;
    private String email;
    private String endereco;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }


}
ContatoDAO
package util;


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

public class ContatoDAO {
    // a conexão com o banco de dados

    private Connection connection;

    public ContatoDAO() throws SQLException {
        this.connection = ConnectionFactory.getConnection();
    }

    public void adiciona(Contato contato) throws SQLException {
        // prepared statement para inserção
        PreparedStatement stmt = this.connection.prepareStatement("insert into " +
                " contatos(nome, email, endereco) values(?, ?, ?)I");
        // seta os valores
        stmt.setString(1, contato.getNome());
        stmt.setString(2, contato.getEmail());
        stmt.setString(3, contato.getEndereco());
        // executa
        stmt.execute();
        stmt.close();
    }

    public List<Contato> getLista() throws SQLException {
        PreparedStatement stmt =
                this.connection.prepareStatement("select * from contatos");
        ResultSet rs = stmt.executeQuery();
        List<Contato> contatos = new ArrayList<Contato>();
        while (rs.next()) {
            // criando o objeto Contato
            Contato contato = new Contato();
            contato.setNome(rs.getString("nome"));
            contato.setEmail(rs.getString("email"));
            contato.setEndereco(rs.getString("endereco"));
            // adicionando o objeto à lista
            contatos.add(contato);
        }

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

    @Override
    protected void finalize() throws Throwable {
        this.connection.close();
        super.finalize();
    }
}
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>lista-elegante.jsp</welcome-file>
        <welcome-file>index.js</welcome-file>
        </welcome-file-list>
    </web-app>
pablouu

faz assim na servlet:

List&lt;Contato&gt; contatosList= new ContatoDAO().getLista();
  request.setAtribuute("contatos",contatosList);

e na jsp vc coloco:

&lt;c:forEach var="contato" items="${requestScope.contatos} "&gt;  
         <li>  
             Nome: ${contato.nome},  
             Email: ${contato.email},  
             Endereço: ${contato.endereco}  
         </li>  
     &lt;/c:forEach&gt;
B

hum vou tentar fazer isso depois de dou o retorno…

Mas viu seguindo o código que coloquei lá em cima… por que será que ele não esta funcionando, se eu segui exatamente como dizia na apostila da Caelum…??

pablouu

dei uma olhada sim, mas pra mim qnd vc faz:

<jsp:useBean id=“dao” class=“util.ContatoDAO” />

<c:forEach var=“contato” items="${dao.lista} ">

pra mim isso só funciona com getters e setters normais, acho que na jsp pra vc chamar metodos de classe java tem que criar uma jstl sua.
posso estar muito enganado, até pq não trabalho com desenvolvimento web, no máximo fiz uma aplicaçãozinha boba rs.

mas do jeito que eu falei aí em cima funciona!

B

hummm… ainda não testei aquele seu código mas acredito que funcione sim…
Qualquer evolução na resolução desse problema posto aqui, ja que mais pessoas poderão passar por isso

P

Olha eu tive o mesmo problema aqui e resolvi alterando a taglib assim:

Dessa forma ele listou os contatos aqui no meu.

Espero ter ajudado.

abraço!

Criado 9 de dezembro de 2009
Ultima resposta 2 de fev. de 2012
Respostas 8
Participantes 4