Foreach jstl

10 respostas
EHS

Estou aprendendo agora a lidar com JSTL e estou com um problema no foreach.

jsp

<jsp:useBean id="ensaio" class="hibernateBD.EnsaioHibernateBD"/> <table> <c:forEach var="lista" items="${ensaio.lista}"> <tr> <td>${lista.nome}</td> </tr> </c:forEach> </table>

código da pesquisa

public List<Ensaio> getLista() { session = hibernateUtil.getSessionFactory().openSession(); Criteria criteria = session.createCriteria(Ensaio.class); List<Ensaio> lista = (List<Ensaio>) criteria.list(); return lista; }

erro

org.apache.jasper.JasperException: /cadEnsaio.jsp(44,12) According to TLD or attribute directive in tag file, attribute items does not accept any expressions org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148) org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1209) org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:846) org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530) org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361) org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411) org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417) org.apache.jasper.compiler.Node$Root.accept(Node.java:495) org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361) org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1763) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198) org.apache.jasper.compiler.Compiler.compile(Compiler.java:347) org.apache.jasper.compiler.Compiler.compile(Compiler.java:327) org.apache.jasper.compiler.Compiler.compile(Compiler.java:314) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:326) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Pelo que entendi do erro ele diz que o items não aceita a expressão, mas eu estou enviando para ele uma lita de ensaios.
Agradeço qualquer ajuda.

10 Respostas

allancmm

Acho que vc deve fazer algo assim:

no servlet:

request.setAttribute("lista", ensaio.lista);

e na JSP:

vc deve fazer assim:

<jsp:useBean id="ensaio" class="hibernateBD.EnsaioHibernateBD"/>  
      <table>  
          <c:forEach var="lista" items="${lista}">  
             <tr>  
              <td>${lista.nome}</td>  
             </tr>  
          </c:forEach>  
        </table>

repare o atributo “items”.

EHS

Será que vc poderia explicar melhor onde eu coloco essa linha no servlet

request.setAttribute("lista", ensaio.lista);

pois usei o método doPost para gravar os dados no bd, mas onde é que eu uso esse código acima no servlet? :oops:

EHS

Bem tentei fazer aqui desse modo e continua ocorrendo o mesmo erro

servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //processRequest(request, response); EnsaioHibernateBD ensaioHibernate = new EnsaioHibernateBD(); List<Ensaio> ensaios = new ArrayList<Ensaio>(); ensaios = ensaioHibernate.getLista(); request.setAttribute("lista", ensaios); }

jsp

<jsp:useBean id="ensaio" class="hibernateBD.EnsaioHibernateBD"/> <table> <c:forEach var="lista" items="${lista}"> <tr> <td>${lista.nome}</td> </tr> </c:forEach> </table>

allancmm

Certo, vc jah debugou o codigo pra ver se o metodo ensaioHibernate.getLista() está retornando um Array ou se está retornando null?

EHS

Nem tem como debugar, pois na linha do foreach no jsp aparece sublinhado dizendo que tem o mesmo erro de sempre.

allancmm

Como assim nao tem como debugar? Manda seu codigo completo ai.

EHS

É bem isso aí mesmo, é estranho mas não da, até tentei, mas antes de chamar qualquer método ou fazer alguma coisa ele já da erro, pois a linha do foreach está sublinhada de vermelho já dizendo que tem um erro :?
Vou te passar tudo.

jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <LINK type="text/css" href="css/dhtmlgoodies_calendar.css" rel="stylesheet">
        <SCRIPT type="text/javascript" src="js/dhtmlgoodies_calendar.js"></SCRIPT>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cadastro de Ensaio - Diego Fotografias</title>
    </head>
    <body>
        <h1> Adicionar Ensaio </h1>
        <form action="EnsaioServlet" name="frmEnsaio" method="POST">
            <table style="border-bottom: 1px solid #000;">
                <tr>
                    <td> Nome: </td>
                    <td> <input type="text" name="nome" id="nome" ></td>
                </tr>
                <tr>
                    <td> Data: </td>
                    <td> <input type="text" name="data" id="data" ></td>
                    <td> <input type="button" name="btn" value="selecionar"
                                onclick="javascript:displayCalendar(document.getElementById('data'),'dd/mm/yyyy',this,true);"/> </td>
                </tr>
                <tr>
                    <td> </td>
                    <td> <input type="submit" name="submit" value="Adicionar Ensaio"/></td>
                </tr>
            </table>
        </form>
        
        <h1> Adicionar Fotos </h1>
        <jsp:useBean id="ensaio" class="hibernateBD.EnsaioHibernateBD"/>
        <table>
            <c:forEach var="lista" items="${lista}">
            <tr>
                <td>${lista.nome}</td>
            </tr>
        </c:forEach>
            </table>

    </body>
</html>

servlet
[code]
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        //processRequest(request, response);
        EnsaioHibernateBD ensaioHibernate = new EnsaioHibernateBD();
        List<Ensaio> ensaios = new ArrayList<Ensaio>();
        ensaios = ensaioHibernate.getLista();
        request.setAttribute("lista", ensaios);
    }
consulta
public List<Ensaio> getLista() {
        session = hibernateUtil.getSessionFactory().openSession();
        Criteria criteria = session.createCriteria(Ensaio.class);
        List<Ensaio> lista = (List<Ensaio>) criteria.list();
        return lista;
    }
[/code]
EHS

Resolvi o erro que estava dizendo, antes estava assim:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

e agora coloquei o jsp ali no meio e funcionou, só que naum está mostrando nada, debuguei e nem esta chamando metodo para fazer a consulta no bd

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
EHS

Consegui, funcionou, só naum entendi bem como funcionou, foi meio na sorte, vou postar os códigos abaixo, se vc puder me explicar fico grato.

jsp

<jsp:useBean id="ensaio" class="hibernateBD.EnsaioHibernateBD"/> <table> <c:forEach var="lista" items="${ensaio.lista}"> <tr> <td>${lista.nome}</td> </tr> </c:forEach> </table>

servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //processRequest(request, response); EnsaioHibernateBD ensaioHibernate = new EnsaioHibernateBD(); List<Ensaio> ensaios = new ArrayList<Ensaio>(); ensaios = ensaioHibernate.getLista(); request.setAttribute("lista", ensaios); }

allancmm

Olha, nao sei pq deu certo, pq no seu servlet o primeiro parametro do metodo setAttribute(), que neste caso eh a string “lista”, eh o nome do atributo que deve ser usado na pagina JSP
assim, se vc faz:

request.setAttribute("nomeAtribuidoPorVc", ensaio.lista);

no seu JSP, vc deveria fazer assim:

<c:forEach var="nomeUsadoNoForEach" items="${nomeAtribuidoPorVc}">  
       <tr>  
          <td>${nomeUsadoNoForEach.nome}</td>  
       </tr>  
  </c:forEach>

espero ter ajudado…

Criado 1 de junho de 2011
Ultima resposta 1 de jun. de 2011
Respostas 10
Participantes 2